Javascript JqGrid重新加载在未卸载网格的情况下无法工作

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

我使用的是jqgrid版本4.5.2。我在网格外有一个角色列表组合框,在更改选项时,我需要重新加载网格。下面是我的网格定义

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查询字符串参数本身中传递所选角色参数。如果我还遗漏了问题中的任何内容,请告诉我。