[以下是轉文]
Ajax從數據庫里讀取數據不能及時更新,這是因為瀏覽器的緩存機制。本文提出了四種解決辦法。
以下是引用片段:
在電信做的小靈通短信訂餐系統中,有幾個頁面要用到三級聯動下拉框,為了使用戶體驗更好,使服務器緩解一定壓力,我決定使用AJAX來完成這個功能,可是我卻粗心大意,漏掉了一個環節,使得ajax從數據庫里讀取數據不能及時更新.這是因為瀏覽器的緩存機制.
有4種方法可以解決這個問題:
1.在請求的URL后面加一個時間參數,如:
time=new date()
??????? 當然也可以添加其他性質參數,只要是隨機參數就可以,
open("GET",url+"?t="+Math.random(),false)
?????? 或者
url+"?timeStamp="+new Date().getTime();
2.
js 代碼
function ajaxRead(file){
var xmlObj = null;
if(window.XMLHttpRequest){
xmlObj = new XMLHttpRequest();
} else if(window.ActiveXObject){
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return;
}
xmlObj.onreadystatechange = function(){
if(xmlObj.readyState == 4){
processXML(xmlObj.responseXML);
}
else{
document.getElementById ('playernews').innerHTML='采用AJAX來實現數據的讀取,正在加載...';
}
}
xmlObj.open ('GET', file, true);
xmlObj.send ('');
}
function show() {
ajaxRead('*.setInterval("ajaxRead('new.} 3.加上
xmlhttp.setRequestHeader("Cache-Control","no-cache");
4.在XmlHttpRequest發送請求之前加上
XmlHttpRequest.setRequestHeader("If-Modified-Since","0"),
?????? 如:在
XXXXX.send(YYYYYY).
[以下是本人注釋]
在使用prototype.js的時候,如果想使用方法3和4,需要這樣寫:
var myAjax = new Ajax.Request(
??????? request_url,
??????? {
??????????? method:'get',
??????????? requestHeaders: ['Cache-Control','no-cache','If-Modified-Since','0'],
??????????? parameters:request_pars,
??????????? asynchronous:true,?????? //true---異步;false---同步.默認為true
??????????? onComplete:processRequest
??????? }????
??? );
注意紅色的代碼部分,你可能注意到這是把3、4兩種方法結合起來使用的。。。
好了,如果你是使用json的話,這個方法一樣好用。
文章來源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!421.entry