jqgrid没有更新重载数据
我有一个jqgrid从xml流加载数据(由django 1.1.1处理):
jQuery(document).ready(function(){ jQuery("#list").jqGrid({ url:'/downtime/list_xml/', datatype: 'xml', mtype: 'GET', postData:{site:1,date_start:document.getElementById('datepicker_start').value,date_end:document.getElementById('datepicker_end').value}, colNames:[...], colModel :[...], pager: '#pager', rowNum: 25, rowList:[10,25,50], viewrecords: true, height: 500, caption: 'Click on column headers to reorder' }); $("#grid_reload").click(function(){ $("#list").trigger("reloadGrid"); }); $("#tabs").tabs(); $("#datepicker_start").datepicker({dateFormat: 'yy-mm-dd'}); $("#datepicker_end").datepicker({dateFormat: 'yy-mm-dd'}); ...
和html元素:
Start Date: End Date:
当我单击grid_reload按钮时,网格会重新加载,但是当它完成时它会显示与之前完全相同的数据,即使测试了xml以返回不同时间戳的不同数据。
我已经使用alert(document.getElementById(’datepicker_start’)。value)检查了触发重载事件时日期输入中的值是否正确传递。
任何想法为什么数据不更新? 也许是缓存或浏览器问题?
在我看来你应该更换
postData:{ site:1, date_start:document.getElementById('datepicker_start').value, date_end:document.getElementById('datepicker_end').value },
同
postData:{ site:1, date_start: function() { return document.getElementById('datepicker_start').value; }, date_end: function() { return document.getElementById('datepicker_end').value;} },
更新 :在您当前的解决方案中,在创建jqGrid时,会计算一次postData
的值。 在postData
,函数jqGrid将postData转发到jQuery.ajax
并在每个jQuery.ajax
期间(在$("#list").trigger("reloadGrid");
)来自$("#list").trigger("reloadGrid");
的值将在jQuery.ajax
读取呼叫。
它看起来像是一个浏览器缓存问题。 默认情况下,IE将缓存GET请求的结果。 因此,即使您从同一个浏览器实例多次发出相同的请求,如果是同一个URL,它也将始终使用缓存版本(IE,来自第一个请求的数据)。
在内部,jqGrid使用jQuery.ajax来检索数据。 您可以通过选项ajaxGridOptions
指示jqGrid将其他选项传递给ajax请求。 所以告诉它不要缓存结果,你应该好好去:
jQuery("#list").jqGrid({ ... ajaxGridOptions: {cache: false} });
或者:
如果第一种方法由于构造GET URL而无法使用django(因为jQuery将使用?
构造),另一种可能的选择是完全重新加载网格。 为此:
- 调用
GridUnload
来卸载网格, - 然后再次调用
.jqGrid
以重新初始化整个网格 - 您还需要在
url
选项中附加时间戳以保证URL是唯一的,否则它将再次缓存。
显然,这不是一个很好的解决方案,但它会工作。
在发出新请求之前卸载网格似乎为我打破了缓存。 在网格获取代码之前简单地使用GridUnload()方法。
$("#list").GridUnload(); jQuery("#list").jqGrid({ ... ajaxGridOptions: {cache: false} });