在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内部的用法。
上面的代码将在每次向服务器发出请求时发送其他参数searchField
和searchValue
,包括分页排序等。因此,如果用户在#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(); } } });