【问题标题】:Refreshing a jqgrid on a menu item click, getting data from a different URL在菜单项单击时刷新 jqgrid,从不同的 URL 获取数据
【发布时间】:2013-01-10 23:20:00
【问题描述】:

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

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

菜单选项是在我们从 ajax 请求中获取数据后动态添加的。触发重新加载时,网格似乎正在重新加载。但是,它似乎从旧 URL('/getdata') 获取数据,而不是具有不同参数集的新 URL。我也尝试了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"}); 

});

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

谢谢,

阿莎

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

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

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

    必须替换为

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

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

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

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

    【讨论】:

    • 谢谢@Oleg,工作就像一个魅力。我现在明白为什么它在你的解释中不起作用。我将在下周左右为服务器端的这个 jqgrid 实现分页。所以这个解释有帮助。请求的 url 确实发生了变化。 URL 语法问题仅存在于我在复制时插入的问题文本中。再次感谢。
    【解决方案2】:

    试试这个

    改变

    loadonce: true, 
    

    loadonce: false, 
    

    我认为 loadonce 是个问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2014-06-29
      • 1970-01-01
      • 2013-10-08
      • 2015-10-21
      • 1970-01-01
      相关资源
      最近更新 更多