IE下Ajax緩衝問題的快速解決方案(get方式)_javascript技巧

來源:互聯網
上載者:User

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

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.