在jqgrid中调用ajax调用问题

我使用struts2-jquery-jqgrid插件构建了jqgrid 。 一切都很好,除了分页

问题:当我点击寻呼机中的下一个按钮时,我想执行一些基于ajax的操作。 我正在使用onPaging(jqgrid method)onPagingTopics主题(jqgrid-plugins)来捕获分页事件。 我成功地获得了这个分页事件,但从这里开始实际问题。 当我点击下一个按钮时,我使用onPagingTopics 主题捕获分页事件,在此事件中我调用ajax-request,但在此ajax-request完成之前, jqgrid会自动重新加载 ,这就是我无法制作的原因ajax-call成功。 为什么会发生这种情况以及如何限制 jqgrid重新加载。

注意:我的jqgrid通过调用我在此网格中指定的url来 重新加载 。 你可以在这里检查网格如何在jqgrid中加载json

这就是我如何捕获分页事件:

 $.subscribe('paging',function(event,data) { var search_string=$("#searchString").val(); var search_field=$("#searchField").val(); $.ajax({ url:"adminJsontable?searchString="+search_string, dataType:"json", success: function(jsondata,stat) { var mgrid = jQuery("#gridtable")[0]; mgrid.addJSONData(jsondata); } }); }); 

更新部分:

  $.subscribe('before',function(event,data) { var grid = jQuery("#gridtable"); grid.jqGrid('setGridParam',{url:"adminJsontable?searchString="+"neo"}); }); 

这就是我改变url的方式,但它无法正常工作。 通过这种方式,我可以获得准备,完成,成功等任何事件。 现在请指导我,我必须这样做。

注意:我可以使用jqgrid中使用的任何方法或任何事件,但不知道如何制作它。

我认为只是误解jqGrid是如何工作的。 如果用户选择另一个页面, jqGrid会默认向服务器发出ajax请求 。 如果您需要在服务器的请求中包含其他自定义筛选器,则可以使用postData (请参阅答案 )。 您可以执行以下操作

 $("#grid").jqGrid({ url: "adminJsontable", postData: { searchField: function () { return $("#searchField").val(); }, searchValue: function () { return $("#searchString").val(); } }, ... // other options which you use }); 

我自己不使用Struts,但我相信你可以自己重写Struts内部的用法。

上面的代码将在每次向服务器发出请求时发送其他参数searchFieldsearchValue ,包括分页排序等。因此,如果用户在#searchField#searchString输入一些数据,那么您的服务器代码将考虑数据。

更新 :如果您在使用struts2-jquery-jqgrid插件时不知道如何指定postData ,则必须仍然能够在HTML页面上包含一些JavaScript文件。 如果你包括

 $.extend(true, $.jgrid.defaults, { postData: { searchField: function () { return $("#searchField").val(); }, searchValue: function () { return $("#searchString").val(); } } }); 

您将能够将postData参数的默认值{}重新定义为上面建议的值。 创建jaGrid 之前执行上述代码非常重要。 如果只能创建网格执行JavaScript代码则可以执行以下代码

 $.extend(true, $("#gridtable").jqGrid("getGridParam", "postData"), { searchField: function () { return $("#searchField").val(); }, searchValue: function () { return $("#searchString").val(); } } });