起源
同一份代码在chrome和ie下出现不同的结果,具体表现为:在ie下保存操作后,页面依然显示为未勾选状态。
思考
最初的时候一直思考是否是代码问题,一度在IE下debug整块代码,无果。后来观察了下三个请求均为get请求,于是转而思考,是否是因为get请求在ie下会有缓存问题。
解释
在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱。
- get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端,
- post方式因为参数的不同,不会产生这个问题。
为了不受缓存影响,可以这样做:
在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上 t=Math.random()
例如这样:
URL+"&"+"t="+Math.random();//或者new Date();
在 URL 参数后加上"?timestamp=" + new Date().getTime();
或者在请求参数data中添加:
data: {
_t: new Date().valueOf() //加时间戳
//_t: Math.random() 加随机数
},
示例
$.ajax({
type: "get",
dataType:"json",
url: "$!{rc.contextPath}/parkledVerb/loadVerbData?id="+id,
data: {
_t: new Date().valueOf() //加时间戳
//_t: Math.random() 加随机数
},
async: false,
success: function (data) {
···
});
最好的方法:
$.ajaxSetup({cache:false})
这样页面中所有的ajax请求时,都执行这个。就不必改已经完成的N个接口。