重新加载网格不适用于多个jqgrid

我正在使用jqgrid。 我的页面有三个选项卡,每个选项卡包含不同的网格。 所有网格都有不同的ID。 选项卡的内容是通过懒惰的AJAX请求获取的。 现在,在渲染了所有三个网格后,我尝试通过函数重新加载网格

jQuery("#myOffersTable").trigger('reloadGrid'); 

只有最后重新加载的网格才对其他网格起作用。

例如,如果网格加载seq为:1-2-3,则此代码仅适用于网格3,但如果seq为3-2-1,则它仅适用于1。

但是,如果我尝试使用导航栏上的重新加载按钮重新加载网格,它可以正常工作。

更新:

我正在使用Struts2 jQuery Plugin.It使用jqGrid 3.6.4我使用ajax加载json数据。

下面是我的网格的定义。

 

我有三个这样的网格都有不同的ID和所有的东西。

每个网格上方都有一个搜索按钮,它使用参数sel.sel调用以下函数,1,2或3对应于每个网格

 function search(sel) { alert("search"); if(sel==1) { tradeOffer = $("#games").val(); var srchValue = $("#srchoptions").val(); $.ajaxSetup({ data: {'gameId': tradeOffer}, }); jQuery("#offerstable").jqGrid('setGridParam',{url:"offers.action?q=1&srch="+srchValue,page:1}); //jQuery("#offerstable").trigger('reloadGrid'); $("#offerstable").trigger("reloadGrid"); } else if(sel==2) { myTradeOfferGame = $("#my").val(); $.ajaxSetup({ data: {'gameId': myTradeOffer}, }); jQuery("#myOffersTable").jqGrid('setGridParam',{url:"offers.action?q=1",page:1}); jQuery("#myOffersTable").trigger('reloadGrid'); } else if(sel==3) { acceptedTradeOfferGame = $("#accepted").val(); $.ajaxSetup({ data: {'gameId': acceptedTradeOffer}, }); jQuery("#acceptedtable").jqGrid('setGridParam',{url:"offers.action?q=1",page:1}); jQuery("#acceptedtable").trigger('reloadGrid'); } } 

为每个网格调用该函数但是

 jQuery("#acceptedtable").trigger('reloadGrid'); 

仅适用于最后加载的网格。

首先,在您的代码中,您定义变量myTradeOfferGameacceptedTradeOfferGame (在else if(sel==2)else if(sel==3) ),但使用myTradeOfferacceptedTradeOffer 。 看起来像是错误。

第二: else if(sel==2)的url else if(sel==2)else if(sel==3)看起来像第一个表中的另一个:URL是静态的,那么为什么每次都要设置这个值? 可能你想在所有url中添加$("#srchoptions").val() ? 你应该自己解决这些问题。

在您的代码中可以看到,您使用$.ajaxSetup来更改$.ajax全局设置。 如果您更改3次,则仅保存最后一次。 如果一次刷新中只有一个设置工作, $.ajaxSetup仍然不是最好的方法。 jqGrid有参数ajaxGridOptions ,它$.ajax每个表设置 $.ajax参数(请参阅设置jQuery jqGrid执行的请求的内容类型 )。

此外,jqGrid(每个实例)都有一个参数postData ,它将作为data参数转发给$.ajax 。 因此,您可以在jqGrid定义中使用此参数。 如果你想在每个 trigger('reloadGrid') 重新加载你作为postData放置的数据,你可以使用函数定义postData$.ajax的默认行为是测试data参数的字段是否为函数,它就是这样, $.ajax调用此函数得到的值。 所以你的代码可能如下所示:

 // definition of 3 jqGrids jQuery("#offerstable").jqGrid ({ postData: {'gameId': function() { return $("#games").val(); } }, //... }); jQuery("#myOffersTable").jqGrid ({ postData: {'gameId': function() { return $("#my").val(); } }, //... }); jQuery("#myOffersTable").jqGrid ({ postData: {'gameId': function() { return $("#accepted").val(); } }, //... }); if(sel==1) { jQuery("#offerstable") .jqGrid('setGridParam', {url:"offers.action?q=1&srch="+encodeURIComponent($("#srchoptions").val()), page:1}) .trigger('reloadGrid'); } else //... // ... 

顺便说一句,如果你使用HTTP GET进行数据请求,那么data参数( postData )中的参数将被添加到url中(放置’?’和’&’就像通常那样)。

最终代码可能如下所示:

 // definition of 3 jqGrids jQuery("#offerstable").jqGrid ({ url:"offers.action", postData: {'q': 1, 'gameId': function() { return $("#games").val(); }, 'srch': function() { return $("#srchoptions").val(); }, //... }); jQuery("#myOffersTable").jqGrid ({ url:"offers.action", postData: {'q': 1, 'gameId': function() { return $("#my").val(); } }, //... }); jQuery("#myOffersTable").jqGrid ({ url:"offers.action", postData: {'q': 1, 'gameId': function() { return $("#accepted").val(); } }, //... }); 

 if(sel==1) { jQuery("#offerstable").jqGrid('setGridParam',{page:1}).trigger('reloadGrid'); } else if (sel==2) { jQuery("#myOffersTable").jqGrid('setGridParam',{page:1}).trigger('reloadGrid'); } else if (sel==3) { jQuery("#acceptedtable").jqGrid('setGridParam',{page:1}).trigger('reloadGrid'); }