请高手解析一下javascript同步与异步区别

47522341 2009-12-13 12:43:48
一直以为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"),恳请高手指点,谢谢!
...全文
711 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengtan1021 2009-12-17
  • 打赏
  • 举报
回复
打个比方.
早上起床,先刷牙,再烧水,等水烧开了洗脸,再整理发型.是同步

先刷牙,再烧水,再整理发型,等水壶滴的一声通知我水烧开了,我再取刚烧开的水洗脸,是异步.
moliu 2009-12-16
  • 打赏
  • 举报
回复
谈笑有鸿儒往来无白丁
qingYun1029 2009-12-13
  • 打赏
  • 举报
回复
路过,学习了!
kyo_liumiao1 2009-12-13
  • 打赏
  • 举报
回复
问题是你的aleat语句在if(xmlobject.readyState==4){ },所以是成功后再调用
47522341 2009-12-13
  • 打赏
  • 举报
回复
楼上的意思就是说采用异步方式之后,当向服务器发送请求时,用户还可以操作页面其他控件。这个我知道。但是上面的代码中:xmlobject.onreadystatechange=verify;表示向xmlobject这个对象注册一个监听函数,随时监听返回的状态,由于采用的是异步,当然应该在注册之后执行后面的语句呀。。。。百思不得其解,恳请高手能够指点迷津。。。。
kyo_liumiao1 2009-12-13
  • 打赏
  • 举报
回复
可以给楼主举个简单的例子,你在用百度autosuggest或者Google得autosuggest得时候,当网速比较慢的时候,你输入的字还没有来得及给你列出联想出来的词语,但是这个时候你仍然可以接着往下输入要搜索的字符串
kyo_liumiao1 2009-12-13
  • 打赏
  • 举报
回复
楼主好像自己弄错了,
xmlobject.onreadystatechange=verify;
xmlobject.load("abc.xml");
alert("asynchronized!!!");
}

function verify(){
if(xmlobject.readyState==4){
alert("call back function");

你这段代码的意思就是当服务器处理好之后然后调用verify这个回调函数,当然这个alert会在服务器执行完才出来
tigermfh 2009-12-13
  • 打赏
  • 举报
回复
你可以认为同步是单线程的异步是多线程的
lfywy 2009-12-13
  • 打赏
  • 举报
回复
这个可以自己调试下就OK了啊!
47522341 2009-12-13
  • 打赏
  • 举报
回复
哥们,你好象刚才说反了吧,xmlobject.asyn=false是表示采用同步的方式,其实默认的方式就是异步的。
孟子E章 2009-12-13
  • 打赏
  • 举报
回复
设置async属性,它代表异步

xmlobject.async=false

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧