Ajax禁止緩衝的幾個解決方案

來源:互聯網
上載者:User

最常用的方法是

方法1:伺服器端代碼加入

 代碼如下 複製代碼
response.setHeader("Cache-Control", "no-cache, must-revalidate");

方法2:用JavaScript在Ajax提交的時候加入一個隨機數作為URL中的一個參數。

 代碼如下 複製代碼
req.open(url + "&" + Math.random).

原因:IE中如果XMLHttpRequest提交的URL與曆史一樣則使用緩衝,根本不向伺服器端提交。因此無法取到剛提交的資料。

1.在服務端加 header("Cache-Control: no-cache, must-revalidate");(如php中)
2.在ajax發送請求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0");
3.在ajax發送請求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache");
4.在 Ajax 的 URL 參數後加上 "?fresh=" + Math.random(); //當然這裡參數 fresh 可以任意取了
5.第五種方法和第四種類似,在 URL 參數後加上 "?timestamp=" + new Date().getTime();
6.用POST替代GET:不推薦
加個隨機數:

 代碼如下 複製代碼

xmlHttp.open("GET", "ajax.asp?now=" + new Date().getTime(), true);

執行個體

 代碼如下 複製代碼

function saveUserInfo()
{
 //擷取接受返回資訊層
 var msg = document.getElementById("msg");
 //擷取表單對象和使用者資訊值
 var f = document.user_info;
 var userName = f.user_name.value;
 var userAge = f.user_age.value;
 var userSex = f.user_sex.value;
 //接收表單的URL地址
 var url = "/save_info.php";
 //需要POST的值,把每個變數都通過&來聯結
 var postStr = "user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex;
 //執行個體化Ajax
 var ajax = InitAjax();
 
 //通過Post方式開啟串連
 ajax.open("POST", url, true);
 //定義傳輸的檔案HTTP頭資訊
 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 //發送POST資料
 ajax.send(postStr);
 //擷取執行狀態
 ajax.onreadystatechange = function() {
  //如果執行狀態成功,那麼就把返回資訊寫到指定的層裡
  if (ajax.readyState == 4 && ajax.status == 200) {
   msg.innerHTML = ajax.responseText;
  }
 }
}

在要非同步擷取的asp頁面中寫一段禁止緩衝的代碼:

 代碼如下 複製代碼
Response.Buffer =True
Response.ExpiresAbsolute =Now() - 1
Response.Expires=0
Response.CacheControl="no-cache"

在ajax發送請求前加上xmlHTTP.setRequestHeader("If-Modified-Since","0");可以禁止緩衝

 代碼如下 複製代碼
xmlHTTP.open("get", URL, true);
xmlHTTP.onreadystatechange = callHTML;
xmlHTTP.setRequestHeader("If-Modified-Since","0");
xmlHTTP.send();

AJAX的緩衝是由瀏覽器維持的,對於發向伺服器的某個url,ajax僅在第一次請求時與伺服器互動資訊,之後的請求中,ajax不再向伺服器提交請求,而是直接從緩衝中提取資料。

有些情況下,我們需要每一次都從伺服器得到更新後資料。思路是讓每次請求的url都不同,而又不影響正常應用:在url之後加入隨機內容。

url=url+"&"+Math.random();
1.每次請求的url都不一樣(ajax的緩衝便不起作用)
2.不影響正常應用(最基本的)
在JSP中禁止緩衝:

 代碼如下 複製代碼

response.addHeader("Cache-Control", "no-cache");
response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");


html實現方法

 代碼如下 複製代碼


<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.