[以下是转文]
 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('*.jsp');  
setInterval("ajaxRead('new.php')",30000); //自动更新  
}  
  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