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(); } }