昨天遇到一个这样的问题:
IE 浏览器,网站 不能正常登陆和退出。
这就怪异了。之前比较忽略IE。用火狐谷歌测试都是好的。
经过反复排查,终于发现了问题所在。
我使用的是jquery get方法获取
在ie上就产生了缓存,我用ie debug检查工具检查一下 缓存后 数据就更新了。说了也不清楚。。后来我改成post就好了,
还有一个方法就是 get的时候传递一个变量值到服务端。也可以解决此问题。
另:百度到的资料
———————–
昨天在用prototype的ajax到业务逻辑取数据时发现,每次新开启浏览器可正常显示数据库更新后的结果,如果刷新浏览器是不会变化的. 但是删除IE临时文件后再刷新就可以正常显示. 由此,我断定可能是IE会缓存ajax请求返回的数据. 查了一些资料发现普遍反映ajax的get方式会缓存,并且有网友提出了解决办法:
1、在服务端加 header(“Cache-Control: no-cache, must-revalidate”);
2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“If-Modified-Since”,”0″);
3、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“Cache-Control”,”no-cache”);
4、在 Ajax 的 URL 参数后加上 “?fresh=” + Math.random(); //当然这里参数 fresh 可以任意取了
5、第四种方法和第三种类似,在 URL 参数后加上 “?timestamp=” + new Date().getTime();
6、用POST替代GET:不推荐
对于以上几点,我还是不满意的,
1的情形,在服务端加,这个问题是ajax搞出来的,应该由它来解决,不管服务端的事;
2和3的情形,我现在用的是prototype,不是普通的ajax原生的语句,所以应该在prototype的前提下解决;
4和5的情形,为什么要在地址后加一个参数?这个参数并不是我的业务逻辑需要的东西(这种方法我还没跑通);
6的情形,改用post,我本来是一个链接就可以搞定的,并且有时必需用链接,却要改成表单,这是不是有点笨了.
对于这个问题的解决,要在prototype的前提下.查阅prototype的文档,可以看到有一个requestHeaders选项,它就是负责处理 请求的头部信息的,上面的方法里也提到在头信息里进行no cache设置,所以我们就把这个选项设置一下就行了.只需在prototype的ajax配置里加一句就行了:
requestHeaders: [‘Cache-Control’,’no-cache’,’If-Modified-Since’,’0′],
例子:
var myAjax = new Ajax.Request(“/Personal/OperatePage.aspx”,
{
method: “get”,
parameters: “action=addfriend&ids=” + escape(ids),
requestHeaders: [‘Cache-Control’, ‘no-cache’, ‘If-Modified-Since’, ‘0’],
onComplete: function (msg) {
alert(msg.responseText);
}
});