jqGrid (Удаляют строку) - Как отправить дополнительные данные POST?

У меня есть проблема с jqGrid, удаляют механизм, поскольку это только отправляет параметры "oper" и "идентификатора" в форме данных POST (идентификатор является первичным ключом таблицы).

Проблема, я должен удалить строку на основе идентификатора и другого значения столбца, скажем, user_id. Как добавить этот user_id к данным POST?

Я могу суммировать проблему как следующее:

  1. Как получить значение ячейки (user_id) выбранной строки?
  2. И, как добавить, что user_id к данным POST, таким образом, это может быть получено из кода позади, где фактические удаляют процесс, происходит.

Примеры кода:

jQuery("#tags").jqGrid({
                url: "subgrid.process.php,
                editurl: "subgrid.process.php?,
                datatype: "json",
                mtype: "POST",
                colNames:['id','user_id','status_type_id'],
                colModel:[{name:'id', index:'id', width:100, editable:true},

                         {name:'user_id', index:'user_id', width:200, editable:true},

                        {name:'status_type_id', index:'status_type_id', width:200}
                ],
                pager: '#pagernav2',
                rowNum:10,
                rowList:[10,20,30,40,50,100],
                sortname: 'id',
                sortorder: "asc",
                caption: "Test",
                height: 200
        });
        jQuery("#tags").jqGrid('navGrid','#pagernav2',
            {add:true,edit:false,del:true,search:false},
        {},
             {mtype:"POST",closeAfterAdd:true,reloadAfterSubmit:true}, // add options
   {mtype:"POST",reloadAfterSubmit:true}, // del options
            {} // search options
        );
14
задан BalusC 14 May 2010 в 12:19
поделиться

2 ответа

У меня была такая же проблема. Способ, которым я это исправил, заключался в том, чтобы поместить user_id в качестве первого столбца в мои jsondata. и с настройками jsonreader jqgrid вы можете сделать это, что будет работать.

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data

посмотрите настройки jsonreader для jsondata.

Я использую:

jsonReader: { cell: "", id: "0" }

и мои данные похожи на

{ totalpages: "xxx",  currpage: "yyy",  totalrecords: "zzz",
  invdata : [
   {"userid","cell12", "cell13", "cell14"},
   {"userid","cell22", "cell23", "cell24"},
    ...
   ]
}

, и теперь, если я обновлю строку или удалю строку, я получу идентификатор пользователя. Надеюсь, это сработает для вас!

0
ответ дан 1 December 2019 в 10:18
поделиться

Это не проблема. Есть разные способы сделать то, что вам нужно. Самый прямой способ - использование функции serializeDelData. Код jqGrid, который удаляет строки, выглядит следующим образом

var ajaxOptions = $.extend({
    url: rp_ge.url ? rp_ge.url : $($t).jqGrid('getGridParam','editurl'),
    type: p.mtype,
    data: $.isFunction(p.serializeDelData) ? p.serializeDelData(postd) : postd,
    complete:function(data,Status){
        //...
    },
    error:function(xhr,st,err){
        //...
    }
}, $.jgrid.ajaxOptions, p.ajaxDelOptions);

$.ajax(ajaxOptions);

Поэтому вы можете просто определить свою собственную функцию serializeDelData, которая сделает все, что вам нужно:

{mtype:"POST", reloadAfterSubmit:true, serializeDelData: function (postdata) {
      var rowdata = jQuery('#tags').getRowData(postdata.id);
      // append postdata with any information 
      return {id: postdata.id, oper: postdata.oper, user_id: rowdata.user_id};
 }}, // del options

Кстати, если вы хотите сами производить данные, отправляемые на сервер, просто возвращайте строку вместо объекта. Тогда данные будут отправлены jQuery.ajax без каких-либо изменений.

Если вы хотите разместить дополнительную информацию не в размещаемых данных, а в URL, вы можете сделать это внутри onclickSubmit. Я, например, использую RESTfull сервис на стороне сервера и для удаления элемента использую HTTP запрос DELETE с пустым телом. Все параметры помещаются в URL. Соответствующий код выглядит следующим образом:

{mtype:"DELETE", reloadAfterSubmit:true, serializeDelData: function (postdata) {
      return ""; // the body MUST be empty in DELETE HTTP requests
 }, onclickSubmit: function(rp_ge,postdata) {
      var rowdata = jQuery('#tags').getRowData(postdata.id);
       rp_ge.url = 'subgrid.process.php/' + encodeURIComponent(postdata.id) +
                   '?' + jQuery.param ({user_id: rowdata.user_id});
 }}, // del options
18
ответ дан 1 December 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: