我遇到了jqGrid删除机制的问题,因为它只以POST数据的形式发送“oper”和“id”参数(id是表的主键)。
问题是,我需要根据id和另一个列值删除一行,比方说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
);
答案 0 :(得分: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发布而不做任何更改。
如果您希望在发布的数据中添加其他信息,但在网址中您可以在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
答案 1 :(得分: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
是你感兴趣的所选行的单元格中的任何内容。
希望这有帮助!
答案 2 :(得分:1)
如果您在 colModel 中设置 key:true ,就可以轻松实现这一目标:
colModel: [
{name: 'childId', index: 'childId', align: 'center', sorttype: 'string', key:true},
这样做会导致在POST期间自动发送此字段。
colModel 中键:true 的目的只是为了让命令处理器在索引记录集上正常运行。
答案 3 :(得分: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。 希望这对你有用!
答案 4 :(得分:0)
我不确定如何发布其他数据,但您可以尝试将其他数据作为查询字符串参数发送,作为delete-url的一部分。
答案 5 :(得分:0)
是的,您可以使用navgrid的del参数下的onclickSubmit事件向postdata添加其他数据,在您的情况下,如果您要发送包含id的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 () {
}
});