在jqgrid中调用ajax调用问题

时间:2013-02-28 10:15:49

标签: ajax jquery jqgrid struts2-jquery

我使用jqgrid插件构建了struts2-jquery-jqgrid。除了分页

之外,一切都很顺利

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

注意:我的jqgrid通过调用此网格中指定的网址来获取重新加载。您可以在此处查看网格how to load json in jqgrid

这就是我捕获分页事件的方式:

$.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中使用的任何方法或任何事件,但不知道如何制作它。

1 个答案:

答案 0 :(得分:1)

我认为对jqGrid的工作方式存在误解。如果用户选择另一个页面 jqGrid按默认情况向服务器发出ajax请求。如果您需要在对服务器的请求中包含其他自定义过滤器,则可以使用postData(请参阅the answer)。您可以执行以下操作

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

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

以上代码会在每个请求上向服务器发送其他参数searchFieldsearchValue,包括分页排序等。因此,如果用户在{{1}中输入一些数据然后,您的服务器代码会考虑数据。

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

#searchString

您可以将jqGrid的postData参数的默认值$.extend(true, $.jgrid.defaults, { postData: { searchField: function () { return $("#searchField").val(); }, searchValue: function () { return $("#searchString").val(); } } }); 重新定义为上面建议的值。在创建 jaGrid之前,应该在上执行上述代码,这一点很重要。如果您只能在创建网格后执行的JavaScript代码,则可以执行以下代码

{}