5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

[顶有分]关于XMLHTTP 4.0以下版本的onreadystatechange只触发一次的问题。

楼主cds27(http://blog.csdn.net/cds27/)2006-02-20 16:02:53 在 Web 开发 / JavaScript 提问

遇到一个问题在,xmlhttp   4.0以下才会出现的问题。xmlHttp.onreadystatechange只触发一次,之后再也不会出发了,这个问题如何解决?代码如下:  
   
  <script   language="javascript">  
  var   SERVER="Server.asp";  
   
  xmlHttp=new   ActiveXObject("Msxml2.xmlHttp.3.0");  
  //xmlHttp=new   ActiveXObject("Microsoft.XMLHttp");//这个版本也不行。  
  xmlHttp.onreadystatechange=onReady;  
  get();  
   
  function   onReady()   {   //只有第一次触发时执行  
  if(xmlHttp.readyState==4)   {  
  alert(xmlHttp.responseText)  
  }  
  }  
  function   get()   {  
  alert("get");//每次都有执行。  
  xmlHttp.Open("POST",   SERVER,   true);  
          xmlHttp.Send();  
  timer=setTimeout(get,   3000);  
  }  
  </script> 问题点数:80、回复次数:12Top

1 楼JK_10000(JK)回复于 2006-02-28 13:58:34 得分 4

方法1:在url后面加个随机数,例如csdn贴子的后面总有个"?temp=.9102289"  
  方法2:修改ie设置:工具--internet选项--常规--设置--每次访问时检查Top

2 楼meizz(梅花雪)回复于 2006-02-28 14:19:50 得分 4

JK   已经答到点子上了。我就不画蛇添足了。Top

3 楼astra1(Hyperion)回复于 2006-03-01 01:07:55 得分 0

修改ie设置听起来比较寒一点   -   -  
  可以在每次取完后重新定义xmlHttp  
   
  function   onReady()   {   //只有第一次触发时执行  
  if(xmlHttp.readyState==4)   {  
  alert(xmlHttp.responseText)  
   
  xmlHttp=new   ActiveXObject("Microsoft.XMLHttp");  
  xmlHttp.onreadystatechange=arguments.callee;//方法自身  
   
  }  
  }  
  Top

4 楼ph580(.Net,我喜欢!www.bjcan.com/hengxing)回复于 2006-03-01 08:48:41 得分 1

jfTop

5 楼xuzuning(唠叨)回复于 2006-03-01 08:54:33 得分 4

方法三:在Server.asp中输出禁用缓存的头Top

6 楼mingxuan3000(铭轩)回复于 2006-03-01 09:26:04 得分 1

markTop

7 楼astra1(Hyperion)回复于 2006-03-01 17:39:13 得分 0

试过在head中加禁用缓存还是一样的,xmlhttp4.0以下可能认为页面没变化就不触发事件了Top

8 楼wtogether(wtogether)回复于 2006-03-01 18:05:34 得分 10

可以n次获取的,用这个:  
  <script   language="javascript">  
  var   SERVER   =   "http://www.163.com";  
   
  var   xmlHttp   =   null;  
   
  function   onReady()  
  {  
  if(xmlHttp.readyState==4)  
  {  
  alert(xmlHttp.getAllResponseHeaders());  
  delete(xmlHttp);  
  }  
  }  
   
  function   get()  
  {  
  xmlHttp   =   new   ActiveXObject("Msxml2.xmlHttp.3.0");  
  xmlHttp.Open("GET",   SERVER,   true);  
  xmlHttp.onreadystatechange   =   onReady;  
  xmlHttp.Send();  
  timer   =   setTimeout(get,   3000);  
  }  
  get();  
  </script>  
  Top

9 楼wtogether(wtogether)回复于 2006-03-01 18:09:13 得分 0

原因就是全局入口设置错误了  
  xmlHttp=new   ActiveXObject("Msxml2.xmlHttp.3.0");  
  //xmlHttp=new   ActiveXObject("Microsoft.XMLHttp");//这个版本也不行。  
  xmlHttp.onreadystatechange=onReady;//就是这里,不应该设置为全局变量的,因为下一次xmlHttp.Open的时候,前一个xmlHttp.onreadystatechange就销毁了Top

10 楼astra1(Hyperion)回复于 2006-03-01 22:10:19 得分 56

根据以上所有人的意见测试过了,真正原因的确是每次请求后onreadystatechange销毁了  
  但和是不是全局变量没关系,因为xmlHttp.onreadystatechange=new   Function("..")的话结果也是一样  
   
  楼主的代码可以加上这一句解决这个问题  
   
  function   get()   {  
  alert("get");//每次都有执行。  
  xmlHttp.Open("POST",   SERVER,   true);  
  xmlHttp.Send();  
   
  xmlHttp.onreadystatechange=onReady;//重新定义一次handle  
   
  timer=setTimeout(get,   3000);  
  }Top

11 楼cds27(http://blog.csdn.net/cds27/)回复于 2006-03-06 14:15:42 得分 0

非常感谢astra1(Hyperion)   兄弟给出了详细的答案。  
   
  同时也感谢几位老大和其他兄弟的关注。Top

12 楼cds27(http://blog.csdn.net/cds27/)回复于 2006-03-06 14:23:34 得分 0

wtogether(wtogether)   兄弟的答案也是正解。Top

相关问题

  • informix7.0版本支持触发器机制吗?如果支持的话,哪里有资料啊
  • xmlhttp的onreadystatechange怎样用vbscript设置
  • 触发器?!
  • 触发问题!
  • 触发器
  • 触发器
  • 求触发器
  • 触发器
  • 触发器(ORACLE)!!!!!!!!!
  • 触发器(ORACLE)!!!!!!!!!

关键词

  • xmlhttp
  • 触发
  • onreadystatechange
  • onready
  • 全局
  • 问题
  • 兄弟
  • 方法
  • 设置
  • new activexobject

得分解答快速导航

  • 帖主:cds27
  • JK_10000
  • meizz
  • ph580
  • xuzuning
  • mingxuan3000
  • wtogether
  • astra1

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问