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 相关文章推荐
javascript 极速 隐藏/显示万行表格列只需 60毫秒
Mar 28 Javascript
jquery 提示信息显示后自动消失的具体实现
Dec 18 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
Jan 22 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 Javascript
JS调用Android、Ios原生控件
Jan 06 Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
Vue自定义弹窗指令的实现代码
Aug 13 Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 Javascript
ES6小技巧之代替lodash
Jun 07 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
ThinkPHP之getField详解
2014/06/20 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
JS实现轮播图效果
2020/01/11 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
python实现井字棋小游戏
2020/03/04 Python
Django多个app urls配置代码实例
2020/11/26 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
自我评价中英文语句
2013/11/30 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
优秀教师先进事迹
2014/01/22 职场文书
文明社区申报材料
2014/08/21 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
生活小常识广播稿
2015/08/19 职场文书