Jquery jqgrid在重新加载时不更新数据
我有一个从xml流加载数据的jqgrid(由django 1.1.1处理): 以及html元素:Jquery jqgrid在重新加载时不更新数据,jquery,caching,jqgrid,Jquery,Caching,Jqgrid,我有一个从xml流加载数据的jqgrid(由django 1.1.1处理): 以及html元素: <th>Start Date:</th> <td><input id="datepicker_start" type="text" value="2009-12-01"></input></td> <th>End Date:</th> <td><input id="datepicker_
<th>Start Date:</th>
<td><input id="datepicker_start" type="text" value="2009-12-01"></input></td>
<th>End Date:</th>
<td><input id="datepicker_end" type="text" value="2009-12-03"></input></td>
<td><input id="grid_reload" type="submit" value="load" /></td>
开始日期:
结束日期:
当我单击grid_reload按钮时,网格会重新加载,但当它这样做时,它会显示与以前完全相同的数据,即使xml被测试为针对不同的时间戳返回不同的数据
我已经使用alert(document.getElementById('datepicker_start').value)检查了在触发重新加载事件时日期输入中的值是否正确传递
你知道为什么数据没有更新吗?可能是缓存或浏览器问题?看起来像是浏览器缓存问题。默认情况下,IE将缓存GET请求的结果。因此,即使您多次从同一浏览器实例发出相同的请求,如果是针对同一URL,它也将始终使用缓存版本(即,来自第一个请求的数据) 在内部,jqGrid用于检索数据。您可以通过选项
ajaxGridOptions
指示jqGrid向ajax请求传递其他选项。因此,只要告诉它不要缓存结果,您就可以开始了:
jQuery("#list").jqGrid({
...
ajaxGridOptions: {cache: false}
});
或者:
如果第一种方法由于GET URL的构造而无法使用django(因为jQuery将使用?
构造),另一种可能的选择是完全重新加载网格。为此:
- 调用
卸载网格GridUnload
- 然后再次调用
,重新初始化整个网格.jqGrid
- 您还需要在
选项中附加一个时间戳,以确保url是唯一的,否则它将再次被缓存李>url
显然,这不是一个很好的解决方案,但它会起作用。这看起来像是一个浏览器缓存问题。默认情况下,IE将缓存GET请求的结果。因此,即使您多次从同一浏览器实例发出相同的请求,如果是针对同一URL,它也将始终使用缓存版本(即,来自第一个请求的数据) 在内部,jqGrid用于检索数据。您可以通过选项
ajaxGridOptions
指示jqGrid向ajax请求传递其他选项。因此,只要告诉它不要缓存结果,您就可以开始了:
jQuery("#list").jqGrid({
...
ajaxGridOptions: {cache: false}
});
或者:
如果第一种方法由于GET URL的构造而无法使用django(因为jQuery将使用?
构造),另一种可能的选择是完全重新加载网格。为此:
- 调用
卸载网格GridUnload
- 然后再次调用
,重新初始化整个网格.jqGrid
- 您还需要在
选项中附加一个时间戳,以确保url是唯一的,否则它将再次被缓存李>url
显然,这不是一个很好的解决方案,但它会起作用。在我看来,您应该更换
postData:{
site:1,
date_start:document.getElementById('datepicker_start').value,
date_end:document.getElementById('datepicker_end').value
},
与
已更新:
在当前解决方案中,
postData
的值在创建jqGrid时计算一次。在具有函数jqGrid forwardpostData
到jQuery.ajax
的postData
中,以及在每次jQuery.ajax
期间(在$(“#列表”).trigger(“reloadGrid”);
之后),将在调用jQuery.ajax
时读取来自日期选择器的值。我觉得您应该替换它
postData:{
site:1,
date_start:document.getElementById('datepicker_start').value,
date_end:document.getElementById('datepicker_end').value
},
与
已更新:
在当前解决方案中,
postData
的值在创建jqGrid时计算一次。在postData
中,使用函数jqGrid将postData
转发到jQuery.ajax
,并在每次jQuery.ajax
(在$(“#列表”).trigger(“重载网格”);
之后)来自datepicker的值将在调用jQuery.ajax
时读取。在发出新请求之前卸载网格似乎会破坏缓存。
在网格获取代码之前简单地使用GridUnload()方法
$("#list").GridUnload();
jQuery("#list").jqGrid({
...
ajaxGridOptions: {cache: false}
});
在提出新请求之前卸载网格似乎会破坏缓存。 在网格获取代码之前简单地使用GridUnload()方法
$("#list").GridUnload();
jQuery("#list").jqGrid({
...
ajaxGridOptions: {cache: false}
});