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

 更新时间:2014年01月09日 10:18:50   投稿:jingxian  
IE下Ajax缓存问题的快速解决方法(get方式)。网上搜了很多解决方案,一大把,下面是我认为比较全面的解决方案。主要分为客户端解决和服务端解决

折腾了半天,程序中使用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判断一个变量是数组还是对象

    这篇文章主要介绍了javascript判断一个变量是数组还是对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 本地Bootstrap文件字体图标引入却无法显示问题的解决方法

    本地Bootstrap文件字体图标引入却无法显示问题的解决方法

    这篇文章主要为大家详细介绍了本地Bootstrap文件字体图标引入却无法显示问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • javascript表单验证和Window详解

    javascript表单验证和Window详解

    这篇文章主要详细介绍了javascript表单验证和Window,并附上了示例代码,非常使用,对于我们更好的了解表单验证和Window很有帮助,这里推荐给大家
    2014-12-12
  • BootStrap与Select2使用小结

    BootStrap与Select2使用小结

    这个select2组件的功能确实很强大,可以将图片放入到select里面随着文字一起显示。接下来通过本文给大家分享BootStrap与Select2使用小结,需要的朋友参考下
    2017-02-02
  • js让弹出新窗口居中显示的脚本

    js让弹出新窗口居中显示的脚本

    我们经常需要在新窗口弹出页面并需要居中显示
    2008-01-01
  • javascript 触发HTML元素绑定的函数

    javascript 触发HTML元素绑定的函数

    只能触发函数的执行,并不能完全模拟出实际的点击。
    2010-09-09
  • JavaScript引用类型Array实例分析

    JavaScript引用类型Array实例分析

    这篇文章主要介绍了JavaScript引用类型Array,结合实例形式较为详细的分析了JavaScript数组相关的创建、检测、转换、排序、栈、队列、引用等各种常见操作技巧,需要的朋友可以参考下
    2018-07-07
  • JS实现设置ff与ie元素绝对位置的方法

    JS实现设置ff与ie元素绝对位置的方法

    这篇文章主要介绍了JS实现设置ff与ie元素绝对位置的方法,涉及JavaScript针对页面元素及元素属性的相关操作技巧,需要的朋友可以参考下
    2016-03-03
  • JavaScript判断数据类型有几种方法及区别介绍

    JavaScript判断数据类型有几种方法及区别介绍

    这篇文章主要介绍了JavaScript判断数据类型有几种方法及区别介绍,本文给大家分享多种方法通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • electron-builder允许安装时请求提升权限的场景分析

    electron-builder允许安装时请求提升权限的场景分析

    electron-builder 作为一个用于 Electron 应用程序打包的工具,需要下载并使用 Electron 运行时来创建可执行文件,这篇文章给大家介绍electron-builder允许安装时请求提升权限的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-03-03

最新评论