最近的项目中,用到了很多ajax请求,大多用的都是jquery中的函数,如$.getJson(),为的是返回一个json格式的字符串便于后续操作。
这样写,看上去没有什么问题,在IE7、8,opera、fireFox下测试都没有什么问题。
但是,当在IE6和IE9下测试的时候,总是请求不到后台的新数据,然后怀疑是缓存问题,搜寻解决的办法,绝大多数朋友都说给页面的头部加如清楚缓存的代码。
| <META HTTP-EQUIV="Pragma"CONTENT="no-cache"> |
| <META HTTP-EQUIV="Cache-Control"CONTENT="no-cache"> |
| <META HTTP-EQUIV="Expires"CONTENT="0"> |
还有在Jsp页面头部加入
| <% |
| response.setHeader("Pragma","No-cache"); |
| response.setHeader("Cache-Control","no-cache"); |
| response.setDateHeader("Expires",0);
|
| response.flushBuffer(); |
| %> |
这些可能只要是页面刷新的情况下是有作用的,但也只是清除页面的缓存,而不是请求缓存。ajax请求不刷新页面,假如这些没有作用。
调试的时候发现,在IE6下当两次请求的action路劲一样的时候,就会没有进入action中的方法,但是返回数据依然有,不过是旧的。
这样的话,请求的action的路劲后面加入一个随机数,比如:
&.getJson("/login.do?rand="+Math.random(),function(data){});如此一来,每次请求都会进入action,当然缓存问题也就迎刃而解了。
另外还遇到一种情况,就是将上面的$.getJson("/login.do",{rand:Math.random()},function(data){})写成这样竟然不起作用,只有向上面一样写,才可以。
难道这是偶然情况。
本文探讨了使用AJAX请求时在不同浏览器(如IE6、IE9)下出现缓存问题的原因及解决方案。通过分析,提出了在页面头部添加元标签的方法以清除浏览器缓存,并解释了在特定情况下直接修改请求参数以实现每次请求获取新数据的重要性。此外,还讨论了AJAX请求与页面刷新的区别,以及如何避免因请求路径重复而导致的数据缓存问题。
655

被折叠的 条评论
为什么被折叠?



