2013-10-01 4 views
1

Может ли кто-нибудь помочь мне получить ответ ajax после встроенного редактирования в jqgrid? Ниже мой код в jqgrid, и я не знаю, как получить ответ на успех ajax после встроенного редактирования.jqgrid inline edit get ajax success reponse

Я пробовал с «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. Поэтому, пожалуйста, предложите мне получить ответ.

ответ

2

Существует множество способов использования встроенного редактирования. Вы используете formatter: "actions", который использует встроенное редактирование внутри. Таким образом, вы можете указать параметры встроенного редактирования внутри formatoptions. Например, чтобы обработать реакцию успеха после встроенного редактирования, вы можете указать обратный вызов onSuccess, который имеет те же параметры, что и successfunc от editRow. Обратный вызов onError может использоваться так же, как errorfunc из editRow. The old answer предоставляет вам пример использования обратных вызовов.

Еще один способ указать successfunc или errorfunc обратные вызовы встроенного редактирования - это использование $.jgrid.inlineEdit.

Еще одним способом является использование jqGridInlineSuccessSaveRow и jqGridInlineErrorSaveRow JQuery событий:

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 может сделать только больше проблем, особенно если вы разрешите редактировать данные.