1

这是我之前在此处发布的问题的后续。多亏了奥列格的回答,我的网格现在可以正确显示了。但是,现在我需要在引导菜单项单击时使用不同的 URL 刷新 jqgrid 中的数据。以下是我的代码:

$("#menuitem").click(function(e){
$("#grid").jqGrid('setGridParam', {url: '/getdata?id=1234&name=val.text'});
    $('#grid').trigger("reloadGrid");
});

我们从 ajax 请求中获取数据后,会动态添加菜单选项。触发重新加载时,网格似乎正在重新加载。但是,它似乎从旧 URL('/getdata') 获取数据,而不是具有不同参数集的新 URL。我也尝试了这里提到的解决方案,但在我的情况下它不起作用,因为我已经动态添加了菜单项。

任何帮助是极大的赞赏。

编辑:我查看了关于萤火虫的页面请求。当我单击菜单项时,我没有看到请求。我还添加了

 $("#list").jqGrid('GridUnload'); 

这个问题的答案中提到的点击处理程序函数。它为我清除了网格,但没有重新加载。所以我在那里添加了 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"}); 

});

有一个更好的方法吗。它的工作看起来太笨重和沉重。有没有办法让重载网格工作?我想这是内部发生的事情,但是当您使用插件时,代码似乎太多了。

谢谢,

阿莎

4

2 回答 2

2

首先,您需要修复代码中的语法错误(如果错误不仅存在于问题的文本中):

url: '/getdata?id=1234&name=val.text'',

必须更换为

url: '/getdata?id=1234&name=val.text',

您存在的主要问题loadonce: true是,如果您不想或不能在服务器端实现数据分页和过滤并且您希望 jqGrid 为您执行此操作,那么您使用的主要问题是非常实用的。您应该了解jqGriddatatype"json"使用"local". loadonce: true仅由于这些更改,所有下一次刷新网格内容的请求(分页、过滤、排序......)都将在本地实现,而不向服务器发出任何请求。如果您需要重新加载网格,则需要在重新加载网格之前将 的值重置datatype"json"GridUnload在以下情况下不需要使用 of :

$("#grid").jqGrid('setGridParam', {
    url: '/getdata?id=1234&name=val.text',
    datatype: "json"
}).trigger("reloadGrid");

顺便说一句,只有在需要更改url参数时才需要设置参数。如果您只想使用与之前相同的 URL 重新加载内容,则只需重置.datatype: "json"

于 2013-01-11T09:17:45.267 回答
1

试试这个

改变

loadonce: true, 

loadonce: false, 

我认为 loadonce 是问题

于 2013-01-11T05:07:48.400 回答