jqGrid(删除行)-如何发送其他POST数据? [英] jqGrid (Delete row) - How to send additional POST data?
问题描述
jqGrid删除机制存在问题,因为它仅以POST数据的形式发送"oper"和"id"参数(id是表的主键).
I'm having problem with jqGrid delete mechanism as it only send "oper" and "id" parameters in form of POST data (id is the primary key of the table).
问题是,我需要基于id和另一个列值(例如user_id)删除一行.如何将此user_id添加到POST数据中?
The problem is, I need to delete a row based on the id and another column value, let's say user_id. How to add this user_id to the POST data?
我可以将问题总结如下:
I can summarize the issue as the following:
- 如何获取所选行的单元格值(user_id)?
- 并且,如何将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
);
推荐答案
这不是问题.有多种方法可以满足您的需求.最直接的方法是使用serializeDelData
函数. jqGrid删除行的代码如下所示:
It is not a problem. There are different ways to do what you need. The most direct way is usage of serializeDelData
function. The code of jqGrid which delete rows look like following
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
函数即可完成所有需要的操作:
So you can just define your own serializeDelData
function which do all what you need:
{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发布而没有任何更改.
By the way if you want produce yourself the data posted to the server, just return a string instead of an object. Then the data will be posted by jQuery.ajax without any changes.
如果您不想在发布的数据中放置其他信息,而在URL中放置其他信息,则可以在onclickSubmit
内部进行.例如,我在服务器端使用了RESTfull服务,并删除了一个使用空主体的DELETE HTTP请求的项目.所有参数都放置在URL中.相应的代码如下所示:
If you prefer to place an additional information not in the data which are posted, but in the URL you can do this inside of onclickSubmit
. I use for example a RESTfull service on the server side and to delete an item I use DELETE HTTP request with the empty body. All parameters are placed in the URL. The corresponding code looks like following:
{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数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!