IE下Ajax缓存问题的快速解决方法(get方式)


Posted in Javascript onJanuary 09, 2014

折腾了半天,程序中使用jquery的load方法进行请求,很奇怪为啥第二次无法发送请求。百度了一把,谁知load是用get方式进行请求的,因此IE浏览器对

其进行缓存了。网上搜了很多解决方案,一大把,下面是我认为比较全面的解决方案。主要分为客户端解决和服务端解决。

1.客户端解决方案
IE访问策略:Internet选项--浏览历史记录--设置-- Internet 临时文件的选项改为每次访问网页时也可以

1: 在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数

在javascript发送的URL后加上t=Math.random()
例如这样:URL+"&"+"t="+Math.random();或者new Date();

2: 在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")

一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);

实践证明,两种方法都非常有效。
1、在服务端加 header("Cache-Control: no-cache, must-revalidate");
2、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");
3、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
4、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了
5、第四种方法和第三种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime(); //推荐使用这种方式
6、用POST替代GET:不推荐

2.服务器端解决方案:

以Struts2为例:
Struts2 Server端用法

Xml代码

<package name="json-nocache" extends="json-default">
 <interceptors>
  <interceptor name="cachingHeadersInterceptor" class="com.ssa.pct.web.interceptor.CachingHeaderInterceptor" />
  <interceptor-stack name="defaultSecurityStack">
   <interceptor-ref name="defaultStack" />
   <interceptor-ref name="cachingHeadersInterceptor" />
  </interceptor-stack>
 </interceptors> <default-interceptor-ref name="defaultSecurityStack" />
</package>

Java代码
public class CachingHeaderInterceptor extends AbstractInterceptor {
 private static final long serialVersionUID = 1L;
 public String intercept(ActionInvocation invocation) throws Exception {
  ActionContext context = invocation.getInvocationContext();
  HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE);
  if (response != null) {
   response.setHeader("Cache-Control", "no-cache");
   response.setHeader("Pragma", "no-cache");
   response.setHeader("Expires", "-1");
  }
  return invocation.invoke();
 }
}
Javascript 相关文章推荐
把JS与CSS写在同一个文件里的书写方法
Jun 02 Javascript
Extjs TimeField 显示正常时间格式的代码
Jun 28 Javascript
用jQuery中的ajax分页实现代码
Sep 20 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
微信小程序搜索组件wxSearch实例详解
Jun 08 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 Javascript
vue中使用codemirror的实例详解
Nov 01 Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
JS严格模式原理与用法实例分析
Apr 27 Javascript
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
Jun 15 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 #Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 #Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
Jan 09 #Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 #Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
Jan 09 #Javascript
fmt:formatDate的输出格式详解
Jan 09 #Javascript
js中window.open()的所有参数详细解析
Jan 09 #Javascript
You might like
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
深入密码加salt原理的分析
2013/06/06 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python对execl 处理操作代码
2020/06/22 Python
高考考python编程是真的吗
2020/07/20 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
资产经营总监岗位职责
2013/12/04 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
《学会合作》教学反思
2014/04/12 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
甲午风云观后感
2015/06/02 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers