一直以为javascript中的同步与异步的的区别是这样的:
同步:提交后等待服务器的响应,接收服务器返回的数据后再执行下面的代码   
异步:与上面相反,提交后继续执行下面的代码,而在后台继续监听,服务器响应后有程序做相应处理,异步的操作好处是不必等待服务器而可以继续在客户端做其它事情。今天在有IE的XML DOM对象时有如下代码:
var xmlobject;
function fillCellDate(){
var arrSignatures = ["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0",
     "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
     "Microsoft.XmlDom"]; for(var i=0;i<arrSignatures.length;i++){
   try{
      xmlobject =new ActiveXObject(arrSignatures[i]);
           }catch(e){
   }
}
xmlobject.onreadystatechange=verify;
                  xmlobject.load("abc.xml");
         alert("asynchronized!!!");
}function verify(){
   if(xmlobject.readyState==4){
alert("call back function");
   }
}按照自己的预期,由于是采用的异步方式,所以alert("asynchronized")会先出现,但是不管怎么测试该弹出框均是在最后出的,这和同步有什么区别呢,都是上面的代码执行完之后再执行alert("asynchronized"),恳请高手指点,谢谢!

解决方案 »

  1.   

    设置async属性,它代表异步xmlobject.async=false
      

  2.   

    哥们,你好象刚才说反了吧,xmlobject.asyn=false是表示采用同步的方式,其实默认的方式就是异步的。
      

  3.   

    楼主好像自己弄错了,
    xmlobject.onreadystatechange=verify; 
                      xmlobject.load("abc.xml"); 
            alert("asynchronized!!!"); 
    } function verify(){ 
      if(xmlobject.readyState==4){ 
    alert("call back function"); 你这段代码的意思就是当服务器处理好之后然后调用verify这个回调函数,当然这个alert会在服务器执行完才出来
      

  4.   

    可以给楼主举个简单的例子,你在用百度autosuggest或者Google得autosuggest得时候,当网速比较慢的时候,你输入的字还没有来得及给你列出联想出来的词语,但是这个时候你仍然可以接着往下输入要搜索的字符串
      

  5.   

    楼上的意思就是说采用异步方式之后,当向服务器发送请求时,用户还可以操作页面其他控件。这个我知道。但是上面的代码中:xmlobject.onreadystatechange=verify;表示向xmlobject这个对象注册一个监听函数,随时监听返回的状态,由于采用的是异步,当然应该在注册之后执行后面的语句呀。百思不得其解,恳请高手能够指点迷津。
      

  6.   

    问题是你的aleat语句在if(xmlobject.readyState==4){ },所以是成功后再调用