首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >刷新菜单项上的jqgrid单击,从不同的URL获取数据

刷新菜单项上的jqgrid单击,从不同的URL获取数据
EN

Stack Overflow用户
提问于 2013-01-11 07:20:01
回答 2查看 2K关注 0票数 1

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

代码语言:javascript
运行
复制
$("#menuitem").click(function(e){
$("#grid").jqGrid('setGridParam', {url: '/getdata?id=1234&name=val.text'});
    $('#grid').trigger("reloadGrid");
});

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

任何帮助都是非常感谢的。

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

代码语言:javascript
运行
复制
 $("#list").jqGrid('GridUnload'); 

添加到this问题答案中提到的单击处理程序函数。它为我清除了网格,但没有重新加载。所以我在这里添加了jqgrid的代码,然后它就可以工作了,jqgrid会显示新的数据。因此,我的更改代码如下所示:

代码语言:javascript
运行
复制
$("#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"}); 

});

有没有更好的方法来做到这一点。对于它所做的事情来说,它看起来太笨重了。有没有办法让重新加载的网格正常工作?我猜这就是在内部发生的事情,但当你使用插件时似乎代码太多了。

谢谢,

阿莎

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 17:17:45

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

代码语言:javascript
运行
复制
url: '/getdata?id=1234&name=val.text'',

必须替换为

代码语言:javascript
运行
复制
url: '/getdata?id=1234&name=val.text',

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

代码语言:javascript
运行
复制
$("#grid").jqGrid('setGridParam', {
    url: '/getdata?id=1234&name=val.text',
    datatype: "json"
}).trigger("reloadGrid");

顺便说一句,你只需要设置url参数,如果你需要改变它。如果你只想用之前相同的网址重新加载内容,你只需要重置datatype: "json"即可。

票数 2
EN

Stack Overflow用户

发布于 2013-01-11 13:07:48

尝尝这个

变化

代码语言:javascript
运行
复制
loadonce: true, 

代码语言:javascript
运行
复制
loadonce: false, 

我认为加载一次是问题所在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14269074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档