这是我先前发布的here问题的跟进。感谢奥列格(Oleg)的回答,现在我的网格正确显示了。但是,现在我需要在引导菜单项单击上使用其他URL刷新jqgrid中的数据。以下是我的代码:
$("#menuitem").click(function(e){
$("#grid").jqGrid('setGridParam', {url: '/getdata?id=1234&name=val.text'});
$('#grid').trigger("reloadGrid");
});
从ajax请求获取数据后,将动态添加菜单选项。触发重新加载时,网格似乎正在重新加载。但是,它似乎是从旧的URL('/ getdata')获取数据,而不是从具有不同参数集的新URL获取数据。我也尝试了提到here的解决方案,但由于我已经动态添加了菜单项,因此在我的情况下不起作用。
任何帮助是极大的赞赏。
编辑:我看着萤火虫上的页面请求。单击菜单项时,我看不到有任何请求。我还加了
$("#list").jqGrid('GridUnload');
回答this问题中提到的单击处理程序功能。它为我清理了网格,但没有重新加载。因此,我在那里添加了jqgrid的代码,然后它起作用了,并且jqgrid显示了新数据。因此,经过更改的代码如下所示:
$("#menuitem").click(function(e){
$("#list").jqGrid('GridUnload');
$("#grid").jqGrid({
url: '/getdata?id=1234&name=val.text'',
datatype: "json",
colNames: ['data'],
colModel: [
{name: 'data', align: 'center'}
],
jsonReader: {
root: "logs",
cell: "",
id: function () {
return function () {
return $.jgrid.randId();
}
},
page: function() { return 1; },
total: function() { return 1; },
records: function(obj) { return obj.logs.length; }
},
loadonce: true,
viewrecords: true,
autowidth: true,
ignoreCase: true,
height: "auto",
rowNum: 999,
autoencode: true,
beforeProcessing: function (data) {
var items = data.data.data.split("\n"), i, l, item;
data.logs = [];
for (i = 0, l = items.length; i < l; i++) {
item = $.trim(items[i]);
if (item.length > 0) {
data.logs.push([item]);
}
}
}
}).jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch: "cn"});
});
有一个更好的方法吗。对于它的工作,它看起来太笨重。有没有办法让重新加载网格正常工作?我想这是内部发生的事情,但是在使用插件时似乎代码太多。
谢谢,
阿莎
最佳答案
首先,您需要修复代码中的语法错误(如果错误不仅存在于问题的文本中):
url: '/getdata?id=1234&name=val.text'',
必须替换为
url: '/getdata?id=1234&name=val.text',
存在的主要问题是因为使用
loadonce: true
,如果您不想或无法在服务器端实现数据的分页和过滤,并且希望jqGrid为您执行此操作,则这非常实用。您应该了解,如果使用datatype
,jqGrid会将原始"json"
从"local"
更改为loadonce: true
。仅由于更改,所有下次刷新网格内容的请求(分页,过滤,排序...)都将在本地实现,而无需任何对服务器的请求。如果需要重新加载网格,则需要在重新加载网格之前将datatype
的值重置为"json"
。在以下情况下,不需要使用GridUnload
:$("#grid").jqGrid('setGridParam', {
url: '/getdata?id=1234&name=val.text',
datatype: "json"
}).trigger("reloadGrid");
顺便说一句,只有在需要更改时,才需要设置
url
参数。如果只想使用与之前相同的URL重新加载内容,则只需重置datatype: "json"
。