我遇到了jqGrid删除机制的问题,因为它只以POST数据的形式发送"oper"和"id"参数(id是表的主键).
问题是,我需要根据id和另一个列值删除一行,比方说user_id.如何将此user_id添加到POST数据?
我可以总结一下这个问题如下:
如何获取所选行的单元格值(user_id)?
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 );
Oleg.. 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
ravl1084.. 7
这就是我如何使用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; } } }, {}, {});
这将返回一个post数组{id:rowNumber,oper:del,name:someValue}.name
是你想如何在post数组中引用你的变量,someValue
是你感兴趣的所选行的单元格中的任何内容.
希望这可以帮助!
这不成问题.有不同的方法来做你需要的.最直接的方法是使用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
这就是我如何使用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; } } }, {}, {});
这将返回一个post数组{id:rowNumber,oper:del,name:someValue}.name
是你想如何在post数组中引用你的变量,someValue
是你感兴趣的所选行的单元格中的任何内容.
希望这可以帮助!