2010-05-14 218 views
14

我有jqGrid删除机制的问题,因为它只发送POST数据(id是表的主键)的形式“oper”和“id”参数。jqGrid(删除行) - 如何发送额外的POST数据?

问题是,我需要删除一个基于id和另一列值的行,让我们说user_id。如何将此user_id添加到POST数据?

我可以总结这个问题,如下所示:

  1. 如何获得所选行的单元格值(USER_ID)?
  2. AND,如何将该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 
     ); 

回答

0

我有同样的问题。我修正它的方法是将user_id作为我的jsondata中的第一列。并与jqgrid的jsonreader设置,你可以完成它的工作。

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

浏览一下jsondata的jsonreader设置。

我使用:

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

,我的数据是一样

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

,现在如果我更新的行或删除行,我会得到用户ID。 希望这可以为你工作!

+0

对不起,但问题不在于获取数据,而是在**从jqGrid中删除行中的**时发布其他信息。一个需要没有一个用户标识符,但是两个id:id和user_id。 – Oleg 2010-05-14 12:32: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服务,并删除一个项目,我使用DELETE HTTP请求与空的正文。所有参数都放在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 
+0

谢谢。 jQuery的( '#标签')getRowData(postdata.id)。正是我所期待的。 – 2010-06-04 06:34:55

+0

当我在网格的每一行上放置一个删除按钮时,我尝试了这种方法 - 它在第一次点击删除时有效,但随后每次删除都使用与第一次点击相同的网址。我修改了代码以摆脱“onclickSubmit”覆盖,而是将适当的url直接传递给delGridRow方法(而不是设置rp_ge.url),并且它工作正常。 – 2010-10-18 14:58:29

+0

@ jrnail23:可能取决于'recreateForm'选项的用法。我有'recreateForm:true'作为我的默认设置。您可以尝试将此选项一起添加到'mtype:“DELETE”,reloadAfterSubmit:true,...'。 – Oleg 2010-10-18 15:36:00

0

我不知道如何发布额外的数据,但你可以尝试发送额外的数据作为查询字符串参数删除的URL的一部分。

6

我这是怎么得的jqGrid追加上删除更多的数据的POST:

var grid = $("#grid").jqGrid(... //make your grid 

$("#grid").jqGrid('navGrid', '#pager', {add:false, edit:false, del:true}, 
        {}, 
        {}, 
        {delData: { 
          name: function() { 
             var sel_id = grid.jqGrid('getGridParam', 'selrow'); 
             var value = grid.jqGrid('getCell', sel_id, 'colName'); 
             return value; 
            } 
          } 
        }, 
        {}, 
        {}); 

这将返回后数组{ID:ROWNUMBER,OPER:删除,名称:someValue中}。 name是您想要在后期数组中引用您的变量的方式,someValue是您感兴趣的所选行中的单元格中的任何内容。

希望这会有所帮助!

0

是的,你可以添加额外的数据navgrid的德尔参数下使用onclickSubmit事件POSTDATA,在你的情况,如果你想发送USER_ID包括身份证,不是做这样的事情

$("#gridId").jqGrid({ 
    }).hideCol(['']).navGrid('#pagerId', { 
     edit: false, add: false, del: true, search: true, refresh: true, beforeRefresh: function() { 
     }, afterRefresh: function() { 
     } 
    }, {}, {}, { 
     afterComplete: function() { 
     }, onclickSubmit: function (params) { 
      var extraParameters = []; var arraySelected = $("#gridId").jqGrid('getGridParam', 'selarrrow'); 
      for (var i = 0; i < arraySelected.length; i++) { 
       extraParameters.push($('#gridId').getRowData(arraySelected[i]).user_id) 
      } 
      return { extraParams: extraParameters.join(',') }; 
     } 
    }, 
    { 
     sopt: ['cn', 'nc'], onSearch: function() { 
     }, 
     onReset: function() { 
     } 
    }); 
1

这可以很容易实现如果设置键:在真正 colModel这样的:

colModel: [ {name: 'childId', index: 'childId', align: 'center', sorttype: 'string', key:true},

做塔t会在POST期间自动发送该字段。

关键的意图:真正colModel只是允许命令处理器上的索引记录集正常运行。

+0

通过设置键:true,它只将值作为_id发送。您无法使用它发送其他字段数据。 – 2018-03-08 20:03:46