1

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

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

这就是我更改网址的方式,但它不起作用。这样我就可以得到任何事件,比如准备好、完成、成功。请指导我现在必须做什么。

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

4

1 回答 1

1

我认为只是误解了 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 内部使用。

上面的代码将在每个请求中向服务器发送附加参数searchField,包括分页排序等。因此,如果用户输入一些数据,那么您的服务器代码将考虑这些数据。searchValue#searchField#searchString

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

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

您将能够将jqGrid 参数的默认值重新定义为我上面建议的值{}postData上面的代码应该在创建 jaGrid之前执行,这一点很重要。如果您只能创建网格后执行 JavaScript 代码,您可以执行以下代码

$.extend(true, $("#gridtable").jqGrid("getGridParam", "postData"),
    {
        searchField: function () {
            return $("#searchField").val();
        },
        searchValue: function () {
            return $("#searchString").val();
        }
    }
});
于 2013-02-28T11:09:54.207 回答