[以下是轉文]
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