使用新数据重新加载jqGrid

时间:2015-02-04 11:56:32

标签: jquery jqgrid

我有这个简单的功能

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中看到“限制”确实有正确的值。

2 个答案:

答案 0 :(得分:11)

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

$("#list").jqGrid('setGridParam', { 
        postData: {"limit":limit }
 }).trigger('reloadGrid'); 

并且,您不需要重新初始化/创建jqGrid,但您只需使用:

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

答案 1 :(得分:5)

我不确定具有这种数据缓存的构造是否良好,但是你当前的问题很明显。

了解电话

非常重要
$("#list").jqGrid({
    url:indexObj.gridUrl,
    ...
});

创建网格。它在非常复杂的div和表结构中转换空<table id="list"></table>。所以只能创建一次网格

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

postData: {
    limit: limitVar
}

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

postData: {
    limit: function () { return limitVar; }
}

如果您将{em>当前值limitVar作为网址limit参数的值,则。顺便说一下,如果用户只需单击列标题,则需要对网格进行排序,并且jqGrid将向url发出新的HTTP请求。如果您在function内使用postData,那么在案例中您将当前limitVar

如果您在现有代码中进行少量修改,那么您可以将行$("#list").trigger("reloadGrid");(当前代码中绝对不需要)替换为

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

它会破坏先前创建的潜水和表格(构建网格)的结构,并在同一个地方创建一个空的<table id="list"></table>。所以你可以重新创建网格。此类代码的效果不是很有效,但在某些情况下可能会非常有用(例如,请参阅the answerthis one)。