之前在做广告投放功能,遇到的一个问题。 在页面上轮播广告,是通过把广告信息保存成xml文件,然后在前台通过唯一的id调取该广告信息,具体用ajax异步响应到xml,把广告内容展示在页面上。
只是ajax响应xml文件的时候,即使后台对广告信息作了相应的修改,可是读取的还是旧的内容。
起初我以为是xml文件保存错误了,可是经查证,发现xml是正确的,仅仅是浏览器上输出的广告与xml内容不符。
这时我想到了,浏览器在本地缓存。要尝试如何避免浏览器缓存造成的不能正确显示广告内容。
页面是有自己的url的,如果保证url每次不一样的时候,就可以使浏览器重新请求,而不是沿用之前请求过的内容, 也就是说,只要在链接的Url加入了一个不会影响网页的内容的随机字串,从而使得每次访问该网页的Url都不同,就可以使浏览器不使用缓存中已有的该网页,而使每次显示的都是最新的内容。
所以,可以这么做:
在url后面加一个参数,保证参数的值是实时变化的,常用的有跟一个随机数的参数,或者跟一个年月日时分秒的参数。我是用后者的,对以前的代码稍作修改就ok,效果很明显,也彻底解决了这个浏览器缓存的问题。
<span style="font-size:14px;"><span style="white-space:pre"> </span>var myDate = new Date();
$.ajax({
url:xx.xml+"?nowTime="+myDate,
type: 'GET',
dataType: ($.browser.msie) ? "text" : "xml",
timeout: 1000,
error: function(xml){
alert('Error loading AdsXML document'+xml);
},
success: function(data){
dsCallback(data,tpl);
}
});</span>
其实也有资料说,可以用
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
来避免浏览器的缓存,这样绝不是最佳方法,也有漏网之鱼的可能。
js文件也可以用以上办法来防止被浏览器莫名的缓存了。