Home > web技术 > 解决IE缓存ajax GET信息的问题

解决IE缓存ajax GET信息的问题

撰写于 2013年09月05日 | 没有评论

今天测试组在测试我们发布的网站的时候发现登录的用户看到的信息与期望结果有所不同,而且该现象只在IE下出现,Chrome中显示的数据与期望值相符。于是在持续抱怨奇葩的IE的同时不得不去调查原因,终于在不懈地挖掘下,发现了造成这种情况的奇葩原因。

bug原因

被发现问题的这个功能我们设计的是通过ajax使用GET调用controller中的action来获取数据list,然后显示在界面上。当我debug跟踪相关action的时候发现,被调用的action只在浏览器第一次跑我们的网站的时候才会被调用,之后无论是更换登录的id还是F5刷新页面,这个action都没被调用。于是就将重心放在了浏览器缓存上,事实证明也的确如此。
当分别使用IE和Chrome的开发者工具来查看相关网络情况的时候,我们发现两者在request header中有一个关键的不同。chrome在发出的情况中默认包含了Cache-Control:no-cache信息,而IE没有。这也就造成了IE在执行ajax的时候会从缓存中提取曾经被缓存下来的结果,而chrome则向服务器发出请求重新获取数据。

解决方案

针对上述发现的原因,我尝试了2种不同的方案来强制IE向服务器发出请求重新获取数据,这里做一个分享。
1.使用post替换get。
2.依然使用get,但添加cache:false的header info。
当使用上述任意一种方案之后,在request header中均看到来Cache-Control:no-cache信息。

最后,不得不在抱怨一句,微软的IE还真是奇葩,这已经不知道是最近第几次发生只在IE中出现问题的情况了。尤其是IE还会有IE9错误,IE10正确的奇葩现象(由于我们的项目只要求IE9以上,所以IE9以下版本直接无视,否则可能更加悲剧了吧)

» 标签: ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>