关于jqGrid postData参数缓存或累加的解决办法
维护公司项目的时候,踩到了前同事留下的关于jqGrid的坑,记录并分享一下:
项目里的一个页面点击列表详情弹出div模态窗口,窗口中有一个jqGrid表格,这个窗口在页面中第一次弹出时加载数据正常,关掉再次打开时,加载的数据和前一次一样。在网上找了好多解决办法试了都不灵,最后自己解决,如下:
前代码:
$("#jqGrid").jqGrid({
url : xxxx,
datatype:"local",
postData:{'params':vm.Tourlist},
//data:{'params':vm.Tourlist},
mtype:"POST",
datatype: "json",
colModel: [
....
],
viewrecords: true,
//height: 385,
rowNum: 10,
rowList : [10,30,50],
rownumbers: true,
rownumWidth: 25,
autowidth:true,
multiselect: false,
pager: "#jqGridPager",
jsonReader : {
root: "page.list",
page: "page.currPage",
total: "page.totalPage",
records: "page.totalCount"
},
prmNames : {
page:"page",
rows:"limit",
order: "order"
},
gridComplete:function(){
//隐藏grid底部滚动条
$("#jqGrid").closest(".ui-jqgrid-bdiv").css({ "overflow-x" : "hidden" });
}
});
修改后代码:
$("#jqGrid").jqGrid({
url : xxxx,
datatype:"local",
postData:{'params':vm.Tourlist},
//data:{'params':vm.Tourlist},
mtype:"POST",
datatype: "json",
colModel: [
......
],
viewrecords: true,
//height: 385,
rowNum: 10,
rowList : [10,30,50],
rownumbers: true,
rownumWidth: 25,
autowidth:true,
multiselect: false,
pager: "#jqGridPager",
jsonReader : {
root: "page.list",
page: "page.currPage",
total: "page.totalPage",
records: "page.totalCount"
},
prmNames : {
page:"page",
rows:"limit",
order: "order"
},
gridComplete:function(){
//隐藏grid底部滚动条
$("#jqGrid").closest(".ui-jqgrid-bdiv").css({ "overflow-x" : "hidden" });
},
beforeRequest: function(){
var postData = $("#jqGrid").jqGrid("getGridParam", "postData");
console.log(postData)
var i = 0;
$.each(postData, function (k, v) {
if(postData[k] == 'params'){
i++;
postData[v] == vm.Tourlist;
}
});
if(i == 0) {
postData.params = vm.Tourlist;
}
}
}).trigger("reloadGrid");
添加了beforeRequest事件中的代码和trigger(“reloadGrid”)方法,测试成功!
不过不知道什么原理,对postData做了操作,第二次打开弹窗不会请求后台,所以加上了trigger(“reloadGrid”)方法。