最近的项目中,用到了很多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){})写成这样竟然不起作用,只有向上面一样写,才可以。
难道这是偶然情况。