刷新菜单项上的jqgrid单击,从其他URL获取数据

时间:2013-01-10 23:20:01

标签: jquery jqgrid

这是我之前发布的here问题的后续内容。由于Oleg的回答,我现在正确显示我的网格。但是,现在我需要在引导菜单项单击时使用不同的URL刷新jqgrid中的数据。以下是我的代码:

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

从ajax请求获取数据后,动态添加菜单选项。当重新加载被触发时,网格似乎重新加载。但是,它似乎从旧URL('/ getdata')获取数据,而不是具有不同参数集的新数据。我也尝试了here提到的解决方案,但由于我动态添加了菜单项,因此无法解决问题。

非常感谢任何帮助。

编辑:我查看了firebug上的页面请求。当我点击菜单项时,我没有看到请求。我还添加了

 $("#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"}); 

});

有没有更好的方法来做到这一点。它看起来太麻烦和沉重。有没有办法让重装网格工作?我想这是内部发生的事情,但是当你使用插件时看起来代码太多了。

感谢,

阿沙

2 个答案:

答案 0 :(得分:2)

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

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参数。如果您只想使用与之前相同的网址重新加载内容,则只需重置datatype: "json"

答案 1 :(得分:1)

试试这个

变化

loadonce: true, 

loadonce: false, 

我认为loadonce是问题