jqGrid:将loadonce作为参数添加到AJAX请求中

时间:2013-01-25 11:45:06

标签: jqgrid

我有一个PHP脚本来处理许多不同jqGrid的AJAX请求。

我使用'sidx'和'sord'参数生成“ORDER BY”语句,使用'page'和'rows'参数生成“LIMIT”语句。

与PHP示例here类似。

问题是,在PHP脚本中我无法确定是否设置了当前jqGrid的loadonce参数。 但是只有在没有设置的情况下,我必须过滤返回的数据(按页面和行限制)。

如何强制jqGrid发送其他参数? 我不想改变我的所有网格。有没有一种全球性的方式呢?

------编辑------

在这个答案(herehere)的帮助下,我现在得到了这个。

$.extend($.jgrid.defaults, {
    postData: {
        loadingType: function() {
            var isLoadonce = $("#list1").jqGrid('getGridParam', 'loadonce');
            console.log('isLoadonce: ' + isLoadonce);
            return isLoadonce ? 'loadAll' : 'loadChunk';
        },
    },
});

如果网格具有ID“list1”,则此方法有效。如何在没有ID的情况下引用当前网格?

------编辑2 ------

这似乎有效。它看起来有点像黑客。还有更好的方法吗?

$.extend($.jgrid.defaults, {
    serializeGridData: function(postData) {
        var isLoadonce = $(this).jqGrid('getGridParam', 'loadonce');
        var newPostData = $.extend(postData, {
            loadingType: isLoadonce ? 'loadAll' : 'loadChunk'
        });
        return $.param(newPostData);
    },
});

2 个答案:

答案 0 :(得分:2)

要传入额外的参数,您可以添加:

 postData: { ExtraDataName: ExtraDataValue },

然后每当jqGrid去获取数据时,它都会将该名称对传递给您的控制器。

答案 1 :(得分:0)

使用serializeGridData,jqGrid提供一个事件来修改随Request发送的数据。事件在当前Grid的上下文中调用,因此我们可以使用this访问当前Grid。

通过$.jgrid.defaults加注,我们可以让所有网格发送他们的loadonce参数作为额外的请求参数,而无需更改任何网格。

$.extend($.jgrid.defaults, {
    serializeGridData: function(postData) {
        var isLoadonce = $(this).jqGrid('getGridParam', 'loadonce');
        var newPostData = $.extend(postData, {
            loadingType: isLoadonce ? 'loadAll' : 'loadChunk'
        });
        return $.param(newPostData);
    },
});