首页 新闻 搜索 专区 学院

关于XMLHttprequest与谷歌浏览器的问题

0
悬赏园豆:30 [已解决问题] 解决于 2015-05-17 21:03

xmlhttprequest设置varAsync=true后,在谷歌浏览器(chrome)下,本应该异步请求阶段执行的语句,却跟请求成功后的语句一起执行了,导致看不到效果,如何解决,意思就是异步请求在谷歌浏览器里面貌似无效的?
例代码片段:

//回调  
xmlHttp.onreadystatechange = updatePage; 
// 发出请求,服务器按照您的要求工作。   
 xmlHttp.send(null);  
 //2.2:处理响应   
  function updatePage() {     
    if (xmlHttp.readyState == 4) {   
          if (xmlHttp.status == 200) {     
            //在谷歌浏览器问题                 document.getElementById("zipCode").value=xmlHttp.responseText;         
    }        
     else if (xmlHttp.status == 404) {  
               alert("访问页面不存在!");     
        }             else {             
    alert("发生错误!");        
     }      
   }        
 else      
  {          
   //在谷歌浏览器下,这句话与上面的同时执行了,导致zipCodevalue值显示‘加载             
 //中....’后,瞬间就给xmlHttp.responseText的值覆盖了,导致过度效果          
   document.getElementById("zipCode").value = "加载中...";          
}    
 } 
问题补充:

博客园真不咋么地,连续问了几个问题,都找不到人解决,失望透顶

sujiaya的主页 sujiaya | 初学一级 | 园豆:10
提问于:2012-11-09 12:15
< >
分享
最佳答案
0

楼主要理清逻辑 什么是异步请求。。

异步 就是代码执行到异步请求这里了 发出异步请求的时候 后面的代码会继续执行,这样异步请求回来了结果,后面的代码也返回了结果就产生了楼主你说的覆盖

理清下逻辑 改下代码就能实现了

收获园豆:30
oppoic | 小虾三级 |园豆:560 | 2012-11-09 12:51

你不明白我的意思啊,朋友,

xmlHttp.onreadystatechange调用的函数,像是定期执行一样,当
xmlHttp.readyState=4,我执行
document.getElementById("zipCode").value=xmlHttp.responseText; 
xmlHttp.readyState=1/2/3的时候,我执行
document.getElementById("zipCode").value="加载中...",
.ashx的文件里面设置一下线程等待两秒
system.Threads.Thread.sleep(2000),
按道理说,这应该能看到加载的效果的,可是IE,火狐都能看到效果,只有谷歌浏览器,他并不按照这个逻辑执行,而是先请求了.ashx后,等到.ashx页面返回了状态信息,他才把代码重头执行了一遍,就看不到异步效果了,这是为何
sujiaya | 园豆:10 (初学一级) | 2012-11-09 14:05
其他回答(1)
0

你怎么没有Open()?还有异步请求不是有个属性嘛,不知道是不是默认是异步请求的。你设置一下嘛看看。async=false

少年学编程 | 园豆:3 (初学一级) | 2012-12-14 14:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册