Ajax禁止缓存的几个解决方案
最常用的方法是
方法1:服务器端代码加入
代码如下 | 复制代码 |
response.setHeader("Cache-Control", "no-cache, must-revalidate"); |
方法2:用JavaScript在Ajax提交的时候加入一个随机数作为URL中的一个参数。
代码如下 | 复制代码 |
req.open(url + "&" + Math.random). |
原因:IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据。
1.在服务端加 header("Cache-Control: no-cache, must-revalidate");(如php中)
2.在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0");
3.在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache");
4.在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了
5.第五种方法和第四种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime();
6.用POST替代GET:不推荐
加个随机数:
代码如下 | 复制代码 |
xmlHttp.open("GET", "ajax.asp?now=" + new Date().getTime(), true); |
实例
代码如下 | 复制代码 |
function saveUserInfo() |
在要异步获取的asp页面中写一段禁止缓存的代码:
代码如下 | 复制代码 |
Response.Buffer =True Response.ExpiresAbsolute =Now() - 1 Response.Expires=0 Response.CacheControl="no-cache" |
在ajax发送请求前加上xmlHTTP.setRequestHeader("If-Modified-Since","0");可以禁止缓存
代码如下 | 复制代码 |
xmlHTTP.open("get", URL, true); xmlHTTP.onreadystatechange = callHTML; xmlHTTP.setRequestHeader("If-Modified-Since","0"); xmlHTTP.send(); |
AJAX的缓存是由浏览器维持的,对于发向服务器的某个url,ajax仅在第一次请求时与服务器交互信息,之后的请求中,ajax不再向服务器提交请求,而是直接从缓存中提取数据。
有些情况下,我们需要每一次都从服务器得到更新后数据。思路是让每次请求的url都不同,而又不影响正常应用:在url之后加入随机内容。
url=url+"&"+Math.random();
1.每次请求的url都不一样(ajax的缓存便不起作用)
2.不影响正常应用(最基本的)
在JSP中禁止缓存:
代码如下 | 复制代码 |
response.addHeader("Cache-Control", "no-cache"); |
html实现方法
代码如下 | 复制代码 |
<META HTTP-EQUIV="pragma" CONTENT="no-cache"> |
Ajax禁止缓存的几个解决方案的更多相关文章
- jQuery禁止Ajax请求缓存
一 现象 get请求在有些浏览器中会缓存.浏览器不会发送请求,而是使用上次请求获取到的结果. post请求不会缓存.每次都会发送请求. 二 解决 jQuery提供了禁止Ajax请求缓存的方法: $.a ...
- IE浏览器中ajax使用缓存数据的问题
今天做了一个小功能:点击鼠标实时更新系统时间,采用ajax,过程很顺利,没遇到啥差错,谷歌,火狐,欧鹏一律通过,怀着忐忑的心情点开了IE8,果然,IE要对得起前端杀手的称号:更新不了时间. 查了一下这 ...
- 使用服务器端控制AJAX页面缓存
你知道 response.setHeader("Cache-Control","no-cache"); 这条语句是干什么的吗? 这是用来防止浏览器缓存动态内容生 ...
- HTML页面和JSP页面禁止缓存
一.JSP页面禁止缓存: 防止浏览器缓存当前访问的JSP动态页面,可以采用如下的方式进行设置,此效果如下的“HTML禁止缓存”: % 将过期日期设置为一个过去时间response.setHeader( ...
- 使用Varnish代替Squid做网站缓存加速器的详细解决方案----转载
[文章作者:张宴 本文版本:v1.2 最后修改:2008.01.02 转载请注明出处:http://blog.s135.com] 我曾经写过一篇文章──<初步试用Squid的替代产品──Varn ...
- jquery ajax return值不能取得的解决方案
jQuery ajax - ajax() 方法 http://www.w3school.com.cn/jquery/ajax_ajax.asp http://www.cnblogs.com/fqw19 ...
- IE浏览器下ajax和缓存的那些事儿
项目经理最近返回了一些问题: (客户浏览器为IE11,本地360,谷歌没发现任何问题) 1.加载页面时下拉框中没有数据,关闭之后再打开出现数据: 2.数据保存之后页面没有刷新: 我也是接手别人的项目, ...
- [转]angular 禁止缓存
本文转自:https://www.cnblogs.com/jonney-wang/p/9797906.html angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦. 在开 ...
- angular 禁止缓存
angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦. 在开发和测试阶段,F12调出调试工具,禁止缓存F5刷新下就好了. 但是在客户那里缓存就体验效果不好,甚至认为有问题, ...
随机推荐
- sdut2164Binomial Coeffcients(组合数求模)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2164 贴一篇写组合数求mod比较好的帖子 这里 ...
- Spring安全框架 Spring Security
Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架. Spring Security 为基于J2EE企业应用软件提供了全面 ...
- linux 多处理器概念
Linux 提出了 Multi-Processing 的概念,它的调度器可以将操作系统的线程均分到各个核(或硬件线程)上去执行,以此达到并行计算的目的,从而也可以极大地提高系统的性能. 实现计数器 1 ...
- R语言实战读书笔记(一)R语言介绍
1.3.3 工作空间 getwd():显示当前工作目录 setwd():设置当前工作目录 ls():列出当前工作空间中的对象 rm():删除对象 1.3.4 输入与输出 source():执行脚本
- Qt之等待提示框(QTimer)
简述 上节讲述了关于QPropertyAnimation实现等待提示框的显示,本节我们使用另外一种方案来实现-使用定时器QTimer,通过设置超时时间定时更新图标达到旋转效果. 简述 效果 资源 源码 ...
- Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)
简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
- Spring MVC文件下载
方案一: // 文件下载 @RequestMapping(value = "/downloadFile") public ResponseEntity<byte[]> ...
- c#中获取服务器IP,客户端IP以及Request.ServerVariables详细说明
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVaria ...
- iOS 开发 中级:UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem自定义方法总结
原文: http://blog.csdn.net/songrotek/article/details/8692866?utm_source=tuicool 对于UIToolbar,UINavigat ...
- hibernate一个注册小例子
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXUAAAJ2CAIAAAAv44WsAAAgAElEQVR4nO29a3QUVaL33fPhfHrW8y