首页 > 请教一个关于ajax清除缓存的问题?

请教一个关于ajax清除缓存的问题?

我学习了w3school的ajax教程,有个地方卡住了。
XMLHttpRequest 对象的 open() 方法接受3个参数,即method、url、async。
其中url代表:文件在服务器上的位置。
那么,给这个url加上一个,Math.random(),url这个参数不就成了:demo_get.asp?t=0.1234567890123456
这为何能正常运行呢?
(目前我文件位置的认识是flie/xxx.txt这样的。)
w3的链接:http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp

GET 请求

一个简单的 GET 请求:

xmlhttp.open("GET","demo_get.asp",true);
xmlhttp.send();

亲自试一试

在上面的例子中,您可能得到的是缓存的结果。

为了避免这种情况,请向 URL 添加一个唯一的 ID:

xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
xmlhttp.send();


问号后面就是给请求加的一些数据啦。如果服务器没有处理这部分,就当不存在了。但是产生的URL中含有随机数,所以就是唯一的了。也就没有缓存。


例如你的文件URL是:flie/xxx.txt
第一次Ajax请求这个文件,浏览器可能会将这个文件缓存在本地,下次再打开这个文件浏览器就可以直接打开本地文件,无需重新通过网络再次获取。
但是,浏览器有可能会好心办了坏事,因为你修改了服务器的flie/xxx.txt文件,但是浏览器不知道,它还是会打开本地缓存的文件,这就会造成一些BUG。
为了防止出现这种问题,在URL上加一个参数“t=随机数”,浏览数会认为两次打开的是不同的东西,第二次Ajax就不会使用第一次Ajax的缓存。

至于“这为何能正常运行呢”?
在URL上加上参数,同样还是打开这个文件,当然可以正常运行。
flie/xxx.txt?t=0.1234567890123456,这个URL同样还是打开文件flie/xxx.txt。


唉,又是一堆毁人不倦的错误答案。

目前网上加随机数来强行刷新缓存的做法是错的!!

HTTP协议中早已有缓存控制方法,详情自己搜HTTP协议之缓存控制部分!


加随机数 Math.random()是为了保证每次的链接是不一样的,这样就不会访问缓存数据了,而是直接访问服务器中的文件了。
【热门文章】
【热门文章】