最常用的方法是
方法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">
|