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 相关文章推荐
JQuery中的html()、text()、val()区别示例介绍
Sep 01 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
jQuery复制表单元素附源码分享效果演示
Sep 30 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
javascript中的3种继承实现方法
Jan 27 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
Jan 08 Javascript
jQuery实现元素的插入
Feb 27 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
使用vuepress搭建静态博客的示例代码
Feb 14 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
May 27 jQuery
Js实现粘贴上传图片的原理及示例
Dec 09 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
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
angular十大常见问题
2017/03/07 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
在vue中使用防抖函数组件操作
2020/07/26 Javascript
python抓取网页内容示例分享
2014/02/24 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
介绍一下linux的文件系统
2015/10/06 面试题
毕业证丢失证明
2014/01/15 职场文书
写给老婆的检讨书
2014/02/21 职场文书
安全检查汇报材料
2014/12/26 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js