问题描述
问题:做消息提醒功能时,循环调用XMLHttpReq.open("GET",url,true),判断数据库是否有到期的提醒.但发现调用XMLHttpReq.open("GET",url,true)后,每次返回的字串符都一样。如果数据库有更新,有新的提醒,也检测不到。也就是每次调用XMLHttpReq.open,都只返回第一次调用的返回值。请高手指点迷津,不胜感激!以下是代码:varXMLHttpReq;functioncreateXMLHttpRequest(){if(window.XMLHttpRequest){XMLHttpReq=newXMLHttpRequest();XMLHttpReq.overrideMimeType("text/xml");}elseif(window.ActiveXObject){try{XMLHttpReq=newActiveXObject("Msxml2.XMLHTTP");}catch(e){try{XMLHttpReq=newActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}}functionsendRequest(type){createXMLHttpRequest();varurl;url="MsgRemind.aspx";XMLHttpReq.open("GET",url,true);XMLHttpReq.onreadystatechange=processResponse;XMLHttpReq.send(null);}functionprocessResponse(){if(XMLHttpReq.readyState==4){if(XMLHttpReq.status==200){varres=XMLHttpReq.responseText;DisplayHot(res);setTimeout("sendRequest(1)",3000);}}}functionDisplayHot(msg){//处理}
解决方案
解决方案二:
1>每次调用后必须清理缓存2>调用周期不要过短,5秒左右吧3>用setinterval代替settimeout做时间循环
解决方案三:
现在的浏览器为了优化性能,都给HttpRequest对象设置了缓存,频繁调用相同的AJAX请求,会出现Lz遇到的问题
解决方案四:
对了,把setTimeout("sendRequest(1)",3000);这行拿出来,用setinterval代替settimeout做时间循环
解决方案五:
修用POST或者在URL后加一个随机参数
解决方案六:
试试url="MsgRemind.aspx?time=<一个每次都不相同的随机数>";让前台页面每次都以不同的地址去刷新数据。
解决方案七:
引用4楼arecaiz的回复:
修用POST或者在URL后加一个随机参数
对,我忘了服务端也有可能出这种情况
解决方案八:
xmlhttp.onreadystatechange=HttpRequestStatusChanged;xmlhttp.open("GET",requestUrl,true);xmlhttp.setRequestHeader('If-Modified-Since','0');xmlhttp.setRequestHeader("Cache-Control","no-cache");xmlhttp.setRequestHeader("Cache-Control","nut-revalidate");xmlhttp.setRequestHeader("Cache-Control","no-store");xmlhttp.setRequestHeader("Pragma","no-cache");xmlhttp.setRequestHeader("Expires","0");xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");xmlhttp.send(null);
解决方案九:
改成post再加个时间戳Math.random()*10
解决方案十:
加时间戳就可以了的