美文网首页
关于Ajax学习中的缓存问题

关于Ajax学习中的缓存问题

作者: 厨房有只偷吃的猫 | 来源:发表于2017-08-13 22:59 被阅读51次

向服务器发送请求

如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:

xmlhttp.open("GET","ajax_info.txt",true);

xmlhttp.send();

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

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

xmlhttp.open("GET","/try/ajax/demo_get.php?t="+Math.random(),true);

xmlhttp.send();



对于以上代码(代码来源链接 )

给这个url加上一个,Math.random(),url这个参数不就成了:demo_get.asp?t=0.1234567890123456

*! 这为何能正常运行呢?

答(回答来自segmentfault ):

例如你的文件URL是:flie/xxx.txt

第一次Ajax请求这个文件,浏览器可能会将这个文件缓存在本地,下次再打开这个文件浏览器就可以直接打开本地文件,无需重新通过网络再次获取。

但是,浏览器有可能会好心办了坏事,因为你修改了服务器的flie/xxx.txt文件,但是浏览器不知道,它还是会打开本地缓存的文件,这就会造成一些BUG。

为了防止出现这种问题,在URL上加一个参数“t=随机数”,浏览数会认为两次打开的是不同的东西,第二次Ajax就不会使用第一次Ajax的缓存。

至于“这为何能正常运行呢”?

在URL上加上参数,同样还是打开这个文件,当然可以正常运行。

flie/xxx.txt?t=0.1234567890123456,这个URL同样还是打开文件flie/xxx.txt。

而url问号后面的部分叫query string(查询字符串)。如果url对应的是php等实现的动态页面,那么查询字符串可能会被服务器处理。如果是个静态文件,查询字符串对服务器而言通常没啥作用,被服务器忽略,而对浏览器来说却可以防止缓存。

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


但是,

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

HTTP协议中早已有缓存控制方法,详情自己搜HTTP协议之缓存控制 部分!(链接来自博客园)。

相关文章

  • 关于Ajax学习中的缓存问题

    向服务器发送请求 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 sen...

  • XMLHttpRequest对象的扩展问题

    解决XMLHttpRequest请求的缓存问题:增加时间戳 解决AJAX应用的中文问题: 请求数据中包含中文,服务...

  • Ajax的缓存问题

    产生缓存的原因: 当Ajax发送数据成功后,会把请求的URL和返回的响应结果保存到缓存内,当下一次调用Ajax发送...

  • jquery使用(一):ajax

    一、ajax基本参数配置 二、ajax数据缓存优化 1.$.ajax不缓存版: 要解决:清除缓存,可以有三种解决方...

  • js清除浏览器缓存的几种方法

    大体是ajax随机数、ajax参数、meta中设置等,具体请往下看 meta方法 清理form表单的临时缓存 其实...

  • 四大引用的学习索引

    关于 SoftReference 在缓存中的使用问题,Android 在官方文档 SoftReference,明确...

  • 关于ajax的问题

    ajax的过程。 1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象 2. 创建一个新的HTT...

  • iOS 缓存之(WebView)网页缓存

    app中关于网页用的是越来越多了,所以有关网页缓存等问题就出现了?怎么进行缓存,获取缓存的大小,获取缓存数据,清理...

  • 数据调取归整-1

    在做ajax页面无刷新添加的时候,IE下遭遇Ajax缓存在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回...

  • ajax中304缓存处理

    这是废话.... 【写的可能不专业,但是我会加油的,ヾ(◍°∇°◍)ノ゙ 】与后台的交互用的是axios,从来也没...

网友评论

      本文标题:关于Ajax学习中的缓存问题

      本文链接:https://www.haomeiwen.com/subject/veqyrxtx.html