广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-06 10:40:24 次阅读 稿源:互联网
    零七广告

    折腾了半天,程序中使用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();
     }

    }

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告