Javascript JqGrid重新加载在未卸载网格的情况下无法工作
我使用的是jqgrid版本4.5.2。我在网格外有一个角色列表组合框,在更改选项时,我需要重新加载网格。下面是我的网格定义Javascript JqGrid重新加载在未卸载网格的情况下无法工作,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我使用的是jqgrid版本4.5.2。我在网格外有一个角色列表组合框,在更改选项时,我需要重新加载网格。下面是我的网格定义 var finalUrl=''; var queueStatus=jQuery('#queueStatus option:selected').val(); finalUrl=“”+选定的OLE+”&“+队列状态 var queueStatus=jQuery('#queueStatus option:selected').val(); finalUrl= "htt
var finalUrl='';
var queueStatus=jQuery('#queueStatus option:selected').val();
finalUrl=“”+选定的OLE+”&“+队列状态
var queueStatus=jQuery('#queueStatus option:selected').val();
finalUrl= "http://localhost:8080/ui/paw/loadworkflowqueuedata.raws?timezone="+&selRole="+ selectedRole+"&"+queueStatus;
jq("#grid").jqGrid('GridUnload');
jq("#grid").jqGrid({
url:finalUrl,
ajaxGridOptions: {cache: false},//added the option to always reload the grid and not to cache the result.
datatype: 'json',
mtype: 'GET',
colNames:[ 'Requestor Name'],
colModel:[
{name:'requestor',index:'requestor',sortable: true, width:100,editable:false, editrules:{required:true}, editoptions:{size:10}}
],
postData: {
},
height: 'auto',
autowidth: true,
rownumbers: true,
pager: '#pager',
viewrecords: true,
sortorder: "asc",
emptyrecords: "Empty records",
loadonce: true,
rowNum:20,
ignoreCase: true,
prmNames: {
nd: null
},
loadComplete: function() {
},
jsonReader : {
root: "rows",
repeatitems: false,
page:"page",
total: "total",
records: "records",
cell: "cell",
id: "id"
}
});
jQuery("#grid").jqGrid('navGrid','#pager',{edit:false,add:false,del:false,search: false, refresh:true})
.navButtonAdd('#pager',{caption:"Export All",buttonicon:"ui-icon-document",onClickButton: function(){window.open(excelUrl,'_self');},position:"last"});
jQuery("#grid").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: "cn",ignoreCase: true });
只有在我保留以下声明的情况下,上面的网格才能正常工作(在rolelist组合框更改时正确刷新)
jq("#grid").jqGrid('GridUnload');
如果我删除了上面的语句并重新加载页面,而不是第一次正确加载网格,但之后如果我更改了“角色列表”组合框中的选项,则无法刷新网格数据,也不会引发任何错误
我可以知道为什么需要卸载网格以进行刷新吗?是否有一种方法可以在不卸载网格的情况下刷新网格?我是否遗漏了网格定义中的任何选项,这也是网格重新加载不起作用的原因?如果需要解决上述问题的更多详细信息,请务必告诉我。您使用
loadonce:true
选项,该选项非常有助于将所有服务器数据一次性加载到客户端,然后在客户端处理数据侧(分页、筛选等)不与服务器进行任何通信。为此,在首次加载数据后,jqGrid将网格的数据类型
参数更改为“本地”
。因此,您需要在触发重新加载网格事件之前,将数据类型
参数的值重置回“json”
相应的代码如下
// create the initial grid
jQuery("#grid").jqGrid({
...
url: finalUrl,
datatype: 'json',
loadonce: true,
...
});
jQuery('#queueStatus').change(function () {
jQuery("#grid").jqGrid("setGridParam", {
datatype: "json",
url: "basePartOfUrl?" + jQuery.param({
timezone: "blabla",
selRole: jQuery('#queueStatus').val();
})
}).trigger("reloadGrid");
});
我使用上面的方法,而不是直接构造字符串中的参数,以使代码更加正确。或者,应该使用
encodeURIComponent
来构造附加到URL的参数值。很明显,如果queueStatus
没有空格、没有特殊字符等,可以直接使用它,但是仍然建议使用encodeURIComponent
或jQuery.param
,使代码独立于字符串参数的值工作。您编写的“网格外的角色列表组合框“并希望在组合框中更改时重新加载网格。另一方面,您发布的代码不包含任何参数,这些参数取决于从列表组合框中选择的角色。您的完整代码中是否还有另一个postData
。我正在传递网格中提到的finlaUrl变量中所选的combobox值。让我更新问题,以便您能够理解。@oleg我已经更新了问题。我正在URL查询字符串参数本身中传递所选角色参数。如果我还遗漏了问题中的任何内容,请告诉我。