I am using jqgrid. My page has three tabs and each tab contains a different grid. All grids have different ids. The content of tabs is fetched via AJAX request lazily. Now after all three grids are rendered and I try to reload grid via function
jQuery("#myOffersTable").trigger('reloadGrid');
Only the grid which loaded last reloads and it doesn't work for other grids.
For example, if grids load seq is : 1-2-3 then this code will only work for grid 3 but if seq is 3-2-1 then it will work only for 1.
But if I try reloading grids using reload button on navigator bar it works fine.
Update:
I am using Struts2 jQuery Plugin.It uses jqGrid 3.6.4 I load json data using ajax.
Below is the definition of my grid.
<div id='t1'>
<s:url id="offersurl" action="offers"/>
<sjg:grid
id="offerstable"
caption="Customer Examples"
autoencode="false"
dataType="json"
href="%{offersurl}"
pager="true"
navigator="true"
navigatorAdd="false"
navigatorDelete="false"
navigatorEdit="false"
navigatorSearch="false"
gridModel="offers"
rowList="10,15,20"
rowNum="15"
rownumbers="true"
onCompleteTopics="addAcceptButtons"
filter="true"
>
<sjg:gridColumn name="id" index="id" title="ID" formatter="integer" sortable="false" search="false"/>
<sjg:gridColumn name="offeror" index="offeror" title="Offeror" sortable="true" search="false"/>
<sjg:gridColumn name="itemOffered" index="itemOffered" title="ItemOffered" sortable="false" search="true" searchoptions="{sopt:['eq']}"/>
<sjg:gridColumn name="quantityOffered" index="quantityOffered" title="QuantityOffered" sortable="false" search="true" searchoptions="{sopt:['eq','lt','gt']}"/>
<sjg:gridColumn name="expectedItem" index="expectedItem" title="ExpectedItem" sortable="false" search="true" searchoptions="{sopt:['eq']}"/>
<sjg:gridColumn name="expectedQuantity" index="expectedQuantity" title="ExpectedQuantity" sortable="false" search="true" searchoptions="{sopt:['eq','lt','gt']}"/>
<sjg:gridColumn name="acceptOffer" index="acceptOffer" title="Accept Offer" search="false"/>
</sjg:grid>
</div>
I have three such grids all have different ids and all that stuff.
There is a search button above each grid which calls the following function with parameter sel.sel is 1,2 or 3 corresponding to each grid
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');
}
}
The function gets called for each grid but
jQuery("#acceptedtable").trigger('reloadGrid');
works for only grid loaded last.
First of all in your code you define variables
myTradeOfferGame
andacceptedTradeOfferGame
(inside ofelse if(sel==2)
andelse if(sel==3)
), but usemyTradeOffer
andacceptedTradeOffer
. It looks like errors.Second: The urls inside of
else if(sel==2)
andelse if(sel==3)
look another as in the first table: URLs are static, so why one should set this value every time? Probably you want to add in all urls the part with$("#srchoptions").val()
? You should fix these problem yourself.In your code one can see, that you use
$.ajaxSetup
which change global settings of$.ajax
. If you change this 3 times only the last one will be saved. If only one from three setting work at one refresh,$.ajaxSetup
is nevertheless not the best way. jqGrid has parameterajaxGridOptions
, which set parameters of$.ajax
per table (see Setting the content-type of requests performed by jQuery jqGrid).Moreover jqGrid (every instance) has a parameter
postData
, which will be forward to$.ajax
asdata
parameter. So you can use this parameter in the jqGrid definition. If you want that the data which you place aspostData
will be reloaded during everytrigger('reloadGrid')
you can just definepostData
using function. The default behavior of$.ajax
is to test whether the field ofdata
parameter is function, it it is so,$.ajax
call this function the get the value. So your code could look like following:By the way if you use HTTP GET for data request, the parameters from
data
parameter (postData
) will be just appended to the url (with placing '?' and '&' like one do this usual).The final code can be something like following:
and