当我们向服务器发送Ajax请求时,在W3C浏览器下,数据可以及时更新,但是如果使用的是IE浏览器且发送的是GET请求,系统会自动缓存请求结果,当下次访问时,系统自动会调用缓存信息,这会造成数据更新不及时。

一、Ajax缓存起源

IE缓存设计初衷:

在实际项目开发中,如果我们向同一url地址发送请求时,系统在第一次访问,会将请求的资源缓存到浏览器的客户端的缓存文件中,当下次继续向同一url地址发送请求时,如果请求资源没有变化,则直接调用缓存文件,这样可以加快网站的访问速度。

二、缓存解决的4中方案

1. 通过随机数的形式解决缓存问题

var url = 'test.php?id='+id+'&_='+Math.random();

缺点:随机数会让我们每次请求的url地址都是不同的,但是由于缓存机制,其每次请求都会进行缓存,所以会在客户端会生成大量的缓存文件。随机数也会重复的可能

2. 通过时间戳的形式来解决缓存问题

var url = 'test.php?id='+id+'&_='+new Date().getTime();

缺点:由于每次请求的url地址都是不同的,所以其也会在客户端生成大量的缓存文件。

3. 通过资源文件的最后修改时间来解决缓存

发送请求时,系统在第一次请求时会生成缓存文件,第二次请求时,会在请求头信息中追加如下参数:

If-Modified-Since:缓存资源文件的最后修改时间

当我们第一次访问服务器时,系统会自动生成请求的资源文件,每个文件在生成时都有三个时间(创建时间、访问时间、最后修改时间),生成完成后,系统会将资源内容+文件的最后修改时间一起返回给客户端IE浏览器,当第二次向同一url发送请求时,系统会自动在请求头信息中携带资源文件的最后修改时间,如果一致,则认为资源文件没有任何改变,将告诉浏览器,不需要重新请求,调用自身缓存即可。

在实际项目开发中,我们可以通过设置请求头来解决以上问题。

// 设置请求头信息解决缓存问题
Ajax对象.setRequestHeader('If-Modified-Sinece','0');

以上方法可以解决缓存问题,同时只会在客户端生成一个缓存文件。

 4. 在服务端禁止客户端进行缓存

header("Cache-Control: no-cache, must-revalidate");

真正含义:告诉浏览器不要对当前请求资源进行缓存

以上方法不会生成任何缓存。

转载于:https://www.cnblogs.com/chenjiacheng/p/6522260.html

解决Ajax中的缓存问题相关推荐

  1. 解决ajax中ie缓存问题(手动添加时间戳)

    回到文章总目录 本章讲解的是ajax的ie缓存 ie浏览器对ajax请求的的结果进行缓存,这会导致ie浏览器ajax请求的的结果(最新返回结果)显示失败,因为它调取了旧的缓存. 1.创建在testsi ...

  2. 解决Ajax中IE浏览器缓存问题

    解决Ajax中IE浏览器缓存问题 1.首先,先看一张图.从这张图中我们可以清楚的了解到从请求的发出到解析响应的过程. 2.根据图中的三个节点我们可以使用三种方式解决这个缓存问题(主要是针对ie) 2. ...

  3. 304 ajax,ajax中304缓存处理

    这是废话.... [写的可能不专业,但是我会加油的,ヾ(◍°∇°◍)ノ゙ ] 与后台的交互用的是axios,从来也没有考虑过缓存的事情,这次后台提出了一个需求,get请求的请求头加上If-Modifi ...

  4. ajax的send方法参数格式,Ajax中send参数

    一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如: var url = "l ...

  5. ajax中cache什么意思,ajax之cache血与泪~~

    场景:项目以ie5渲染页面,点击导出列表数据(Excel形式),点击导出发送get请求,后台生成Excel文件,返回文件地址信息 异常:ie第一次返回的信息正常,之后返回的都是第一次的结果,googl ...

  6. php ajax session失效,PHP中解决ajax请求session过期退出登录问题

    1.session过期,如果直接是url请求,或者用户在打开的系统页面中直接清除缓存及cookie信息,可直接在php的入口文件中调用以下封装的方法,进行session信息判断以及页面的跳转,如: i ...

  7. Ajax中请求被缓存的问题

    Ajax中请求被缓存的问题 在Ajax开发中,会遇到浏览器缓存内容的问题,比如,某个元素注册了鼠标事件(onmouseover),事件触发后会通过 xmlhttprequest到服务器获取内容,在不刷 ...

  8. ajax去掉session,PHP中解决ajax请求session过时退出登陆问题

    一.session过时,若是直接是url请求,或者用户在打开的系统页面中直接清除缓存及cookie信息,可直接在php的入口文件中调用如下封装的方法,进行session信息判断以及页面的跳转,如: p ...

  9. django中的缓存 单页面缓存,局部缓存,全站缓存 跨域问题的解决

    django中的缓存 单页面缓存,局部缓存,全站缓存 跨域问题的解决 参考文章: (1)django中的缓存 单页面缓存,局部缓存,全站缓存 跨域问题的解决 (2)https://www.cnblog ...

最新文章

  1. IDEA配置NodeJS项目遇到问题及解决
  2. tortosiegit github
  3. Poisson Surface Reconstruction
  4. 关于hive中Map join 时大表left join小表的问题
  5. 21. Leetcode 203. 移除链表元素 (链表-基础操作类-删除链表的节点)
  6. .net随笔-vb.net 剪粘板(1)
  7. Linux shell ==运算符
  8. ITK:将不断变化的密集2D水平集可视化为高程图
  9. 【Pytorch神经网络实战案例】03 CIFAR-10数据集:Pytorch使用GPU训练CNN模版-测试方法
  10. 广告拦截之easylist和easylistchina订阅地址
  11. centos7 安装Gitlab
  12. pb 哪里找到系统图标_建议收藏的7个高质量图标网站,一网打尽图标素材
  13. MW313R和FWR310路由器桥接
  14. 关于Ubuntu python程序利用lixb264生成h264格式的视频相关问题
  15. 致前行者 | 他们,只用了两公里地铁的钱,就实现了中国探月
  16. word中 设置标题级别 的 快捷键
  17. 2020 11月8周记
  18. 【Unity技术积累】人物移动 坦克式移动 WASD 动画
  19. 让最好用的印象笔记更好用
  20. 全球最流行12款浏览器

热门文章

  1. 深度学习《EBGAN》
  2. leetcode —— 2. 两数相加 (对于链表更新的细节)
  3. Origin绘制上面和右边边框
  4. 离散余弦变换原理及实现【转载】
  5. Opencv--cvGEMM、cvMatMul和cvMatMulAdd的定义
  6. 设计模式学习笔记——享元(Flyweight)模式
  7. 计蒜客——数位反转问题(代码+解析)
  8. 【基础】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 02 - 路由
  9. oracle数据库实例关闭步骤,Oracle 数据库实例起动关闭过程
  10. 二叉搜索树的删除操作可以交换吗_JavaScript数据结构 — 二叉搜索树(BST)ES6实现...