由于浏览器的缓存机制,当我们使用XMLHttpRequest发出请求的时候,浏览器会将请求的地址与缓存中的地址进行比较,如果存在相同记录则根据不向服务器发出请求而直接返回与上一次请求相同内容。其实不光是在Ajax应用中,在我们项目开发中使用一个基本的JavaScript更换验证码时,也会发生发出请求之后,并没有得到服务器端更新的结果的问题。以上皆是缓存问题,解决这类缓存问题并不麻烦,而且方法很多。
1.时间戳方法 ——即在每次请求的url后面加上当前时间的字符串或其他类似的不会重复的随机字符串,这样浏览器每次发出的是不同的url,即会当做不同的请求来处理,而不会从缓存中读取。
if(url.indexOf("?")>=0){//判断url中是否已经带有参数
url = url + "&t=" + (new Date()).valueOf();
}else{
url = url + "?t=" + (new Date()).valueOf();
}
2、在HTTP header上处理缓存
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="expires" content="Thu, 01 Jan 1970 00:00:01 GMT" />
<meta http-equiv="expires" content="0" />
3. 在XMLHttpRequest发送请求之前加上:
XMLHttpRequest.setRequestHeader("If-Modified-Since","0");
XMLHttpRequest.send(null);