对于实时性的数据 必须不能缓存。
方法一:加If-Modified-Since 头
xmlhttp多次调用时它却总是显示缓存页面, 尝试在 php 或 asp 中加入相应的http头明确不要缓存, 也没什么效果!!
现在终于找到一个办法啦,就是在 xmlhttp.open 之后发送一个If-Modified-Since 头 即可, 代码如下
xmlhttp.setRequestHeader('If-Modified-Since', '0');
方法二:请求URL后加变化参数
js: URL = "http://host/a.php"+"?"+Math.random();
vbs: URL = "http://host/a.php"&"?"&Timer()
推荐使用方法一,简洁灵活,不影响URL参数。
方法二的问题在于,URL本身可能带有一些参数,那就要判断是加"?"还是加"&"了。
原帖:http://www.cnblogs.com/cuixiping/articles/1118246.html
Ajax清理缓存的方法
1、在服务端加 header("Cache-Control: no-cache, must-revalidate"); 2、在ajax发送请求前加上 xmlHttp.setRequestHeader("If-Modified-Since","0"); 3、在ajax发送请求前加上 xmlHttp.setRequestHeader("Cache-Control","no-cache"); 对于2和3也就是这样实现:
function changepass(upass) {
createXMLHttpRequest();
var url = "cpass.asp?uid=" + upass ;
xmlHttp.open("GET", url, true);
xmlHttp.on
xmlHttp.setRequestHeader("If-Modified-Since","0");//清楚ie缓 存------>2
//xmlHttp.setRequestHeader("Cache-Control","no- cache");//清楚ie缓存------->3
xmlHttp.send(null);
} 4、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了 5、第五种方法和第四种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime(); 6、用POST替代GET:不推荐
在项目中使用ajax,有时会遇到ie缓存的干扰,导致取不到最新的数据。解决的办法有两种:
1.在请求地址的末尾加入一个随机数作为参数,这样就能和上一次的请求区分开来。
2.在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified- Since","0") ,然后再使用send方法。
附:If-Modified-Since介绍
在http中Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,注意,在这 Last-Modified 是由服务器往客户端发送的 HTTP 头,另一个 If-Modified-Since是由客户端往服务器发送的头,可以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。
而且在一些ajax应用中,要求获取的数据永远是最新的,而不是读取位于缓存中的数据,做这样的设置是非常有必要的