首頁 >web前端 >js教程 >IE下Ajax快取問題的快速解決方法(get方式)_javascript技巧

IE下Ajax快取問題的快速解決方法(get方式)_javascript技巧

WBOY
WBOY原創
2016-05-16 17:04:47965瀏覽

折騰了半天,程式中使用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程式碼

複製程式碼 程式碼如下:

 
  


   
   
  

 




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 responseas (HttmSerutsval.  if (response ! = null) {
   response.setHeader("Cache-Control", "no-cache");
   response.setHeader("Pragma", "no-cache");
  . Expires", "-1");
  }
  return invocation.invoke();
 }

}


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn