萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> IE下Ajax緩存問題的快速解決方法

IE下Ajax緩存問題的快速解決方法

 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();  }   }
copyright © 萬盛學電腦網 all rights reserved