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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
JavaScrip单线程引擎工作原理分析
Sep 04 Javascript
新鲜出炉的js tips提示效果
Apr 03 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
Javascript Web Slider 焦点图示例源码
Oct 10 Javascript
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
vue获取DOM元素并设置属性的两种实现方法
Sep 30 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
在PHP中使用模板的方法
2008/05/24 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
关于读书的活动方案
2014/08/14 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
优秀班集体申报材料
2014/12/25 职场文书
人民币使用说明书
2019/04/17 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python装饰器的练习题
2021/11/23 Python