2013-01-25 40 views
0

我有一个PHP脚本来处理许多不同jqGrid的AJAX请求。jqGrid:将loadonce作为参数添加到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的情况下引用当前网格?

------ EDIT 2 ------

这似乎是工作。它看起来有点像黑客。有没有更好的办法?

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

你能否提供一个jsfiddle的问题? –

+0

@ Floradu88我不知道我能在jsFiddle中展示给你什么。我的问题不是网格无法正常工作。但我想知道是否有方法来扩展网格的ajax请求。 – Stahlkocher

回答

0

使用serializeGridData,jqGrid提供了一个事件来修改与请求一起发送的数据。该事件在当前网格的上下文中调用,因此我们可以通过this访问当前网格。

通过发表$.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); 
    }, 
}); 
2

要传递一个额外的参数,你可以添加:

postData: { ExtraDataName: ExtraDataValue }, 

那么无论什么时候的jqGrid去得到的数据将通过这个名字对你的控制器。

+0

是的,但这种方式附加值是静态的。在服务器站点上,我想知道当前网格是否“加载”。 随着我的第二个“编辑”,我找到了一种方法来存档这个。我只是不知道这是否是最好的方式。 – Stahlkocher

+0

我不确定我是否理解这个问题?在我上面的例子中,如果你想传递loadonce值,你可以设置'ExtraDataName:$(this).jqGrid('getGridParam','loadonce');'' – Mark

相关问题