1

在 jqgrid 中进行内联编辑后,任何人都可以帮助我获得 ajax 响应吗?下面是我在 jqgrid 中的代码,我不知道如何在内联编辑后获得 ajax 成功响应。

我尝试过使用“loadComplete”、“gridComplete”和“afterComplete”。这些仅在加载网格后才有效,但在编辑单元格后无效。

jQuery('#grid').jqGrid({
            "width": "640",         
            "hoverrows": true,
            "viewrecords": false,
            "gridview": true,
            "url": "es.php",
            "editurl": "es.php",
            "cellurl": "es.php",
            "rowNum": 10,
            "rowList": [10, 20, 30],
            "sortname": "id",
            "datatype": "json",
            "colModel": [{
                "name": "employee",
                "sortable": false,
                "index": "employee",
                "editable": true,
                "editrules": { required: true } 
            }, {
                "name": "age",
                "index": "age",
                "sortable": false,
                "editable": true,
                "editrules": { required: true } 
            }, {
                "name": "actions",
                "formatter": "actions",
                "editable": false,
                "sortable": false,
                "resizable": false,
                "delbutton" : false, 
                "fixed": true,
                "width": 60,
                "formatoptions": {
                    "keys": true,
                    "delbutton" : false, 
                    "delOptions": {}, 
                }
            }, {
                name: 'id',
                index: 'id',
                "key": true,
                hidden: true,
                viewable: true,
                editrules: {
                    edithidden: true
                },
                    "editable": false
                }
            ],
            "postData": {
                "oper": "fsgrid"
            },
            "prmNames": {
                "page": "page",
                "rows": "rows",
                "sort": "sidx",
                "order": "sord",
                "search": "_search",
                "nd": "nd",
                "id": "id",             
                "searchField": "searchField",
                "searchOper": "searchOper",
                "searchString": "searchString",
                "oper": "oper",
                "query": "grid",
                "addoper": "wsadd",
                "editoper": "wsedit",
                "excel": "excel",
                "subgrid": "subgrid",
                "totalrows": "totalrows",
            },
            "loadError": function(xhr, status, err) {
                try {
                    jQuery.jgrid.info_dialog(jQuery.jgrid.errors.errcap, '<div class="ui-state-error">' + xhr.responseText + '</div>', jQuery.jgrid.edit.bClose, {
                        buttonalign: 'right'
                    });
                } catch (e) {
                    alert(xhr.responseText);
                }
            },
            "pager": "#pager",
            beforeShowForm: function(form) {
              $(".ui-inline-del").remove();
            },
        }); 

         jQuery('#grid').jqGrid('navGrid', '#pager', {
                "edit": false,
                "add": true,
                "del": false,
                "search": false,
                "refresh": false,
                "view": false,
                "excel": false,
                "pdf": false,
                "csv": false,
                "columns": false
            });     

有了以上内容,一切正常。但内联编辑完成后,我不知道如何获得 ajax 响应。不仅如此,我对 jqgrid 还很陌生。我想,我使用的是非常基本的 jqgrid 代码。所以请建议我得到回应。

4

1 回答 1

2

有很多方法可以使用内联编辑。您使用formatter: "actions",它在内部使用内联编辑。所以你可以在formatoptions. 例如,要在内联编辑后处理成功响应,您可以指定具有与editRowonSuccess相同参数successfunc的回调。回调的使用方式与of相同。旧答案为您提供了回调用法的示例。onErrorerrorfunceditRow

另一种指定successfuncerrorfunc回调内联编辑的方法是使用$.jgrid.inlineEdit.

jqGridInlineSuccessSaveRow另一种方法是使用jqGridInlineErrorSaveRowjQuery 事件:

jQuery("#grid").bind("jqGridInlineSuccessSaveRow",
    function (e, jqXHR, rowid, options) {
        alert("successful server response:\"" + jqXHR.responseText + "\"");
        // in case of adding new row on the server you can return id
        // of the new row
        return [true, jqXHR.responseText];
    }
);

(我没有测试代码,但我希望我在这里没有出错)。

对您发布的代码的一些小注释:您可以beforeShowForm从 jqGrid 选项列表中删除回调。回调可以在表单编辑的情况下使用,它应该在另一个地方使用。

id还有一点:如果您正确填写 jqGrid,您可以删除不需要的隐藏列。重要的是要了解 jqGrid 将id属性分配给网格的每一行(给<tr>元素)。该id属性的值是rowid。隐藏id列的存在只会带来更多问题,特别是如果您允许编辑数据。

于 2013-10-01T09:43:51.607 回答