Jquery 用新数据重新加载jqGrid

Jquery 用新数据重新加载jqGrid,jquery,jqgrid,Jquery,Jqgrid,我有一个简单的函数 function createGrid(limit){ $("#list").trigger("reloadGrid"); $("#list").jqGrid({ url:indexObj.gridUrl, postData:{ "limit":limit }, datatype: "json", colNames:['ID','type','folder

我有一个简单的函数

function createGrid(limit){
    $("#list").trigger("reloadGrid"); 
    $("#list").jqGrid({
        url:indexObj.gridUrl,
        postData:{
            "limit":limit
        },
        datatype: "json",
        colNames:['ID','type','folder','Description'],
        colModel:[
            {name:'id',index:'id', width:50},
            {name:'type',index:'type', width:100},
            {name:'folder_id',index:'folder_id', width:100},
            {name:'description',index:'description', width:200} 
        ]
    });
}
我首先用limit=1调用它,它调用服务器并返回正确的数据。 然后我用limit=2调用它,它只是重新运行上一个ajax调用(limit=1),当然返回相同的数据


为什么postData实际上没有改变?我在fireBug中看到“limit”的值是正确的。

我不确定这种缓存数据的构造是否良好,但您当前的问题是清楚的

重要的是要明白,电话

$("#list").jqGrid({
    url:indexObj.gridUrl,
    ...
});
创建网格。它在非常复杂的div和表结构中转换空的
。因此,只能创建一次网格

网格由许多部分组成(如标题),这些部分不需要在下一次填充网格时重新创建。因此jqGrid提供了
reloadGrid
事件,可以触发该事件来重新填充网格体。如果jqGrid有
postData
,具有如下值

postData: {
    limit: limitVar
}
然后,if表示将创建
postData
的对象值,并使用
limitVar
变量的当前值初始化。如果您有外部变量(全局,或在某些外部范围中定义),则可以使用

postData: {
    limit: function () { return limitVar; }
}
在这种情况下,您将使用
limitVar
的当前值作为URL的
limit
参数的值。顺便说一下,如果用户只需单击列标题,网格需要排序,jqGrid将向
url
发出新的HTTP请求。如果在
postData
中使用
函数
,则在这种情况下,当前值也将为
limitVar

如果对现有代码的修改较少,则可以替换行
$(“#list”).trigger(“reloadGrid”)(在当前代码中绝对不需要)以


它将破坏先前创建的潜水和表格结构(构建网格),并在同一位置创建一个空的
。因此,您可以重新创建网格。此类代码的工作效率不高,但在某些情况下(例如,请参见和)。

或者在重新加载时,可以使用
setGridParam
重置
postData

$("#list").jqGrid('setGridParam', { 
        postData: {"limit":limit }
 }).trigger('reloadGrid'); 
而且,您不需要重新初始化/创建jqGrid,但只需使用:

function createGrid(limit){
    $("#list").trigger("reloadGrid"); 
    #Code Goes here#
}

奇怪的是,我在$(“#list”).jqGrid(“GridUnload”)@CoffeeCode:您应该验证加载的jqGrid。可能您使用了来自的自定义下载,但没有包含自定义模块(请参阅)?我建议您只包含
jquery.jqGrid.src.js
。您可以在任何文本编辑器中打开该文件并搜索
GridUnload
function createGrid(limit){
    $("#list").trigger("reloadGrid"); 
    #Code Goes here#
}