解决Ajax更新不及时的途径

日期: 2007-12-04 作者:JGambler-JavaEye技术社区 来源:TechTarget中国

  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).

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国