作者:Ale__x小葡萄 | 来源:互联网 | 2023-05-17 20:52
一直以为javascript中的同步与异步的的区别是这样的:同步:提交后等待服务器的响应,接收服务器返回的数据后再执行下面的代码异步:与上面相反,提交后继续执行下面的代码,而在后台继续监
一直以为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
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"),恳请高手指点,谢谢!
11 个解决方案
设置async属性,它代表异步
xmlobject.async=false
哥们,你好象刚才说反了吧,xmlobject.asyn=false是表示采用同步的方式,其实默认的方式就是异步的。
楼主好像自己弄错了,
xmlobject.Onreadystatechange=verify;
xmlobject.load("abc.xml");
alert("asynchronized!!!");
}
function verify(){
if(xmlobject.readyState==4){
alert("call back function");
你这段代码的意思就是当服务器处理好之后然后调用verify这个回调函数,当然这个alert会在服务器执行完才出来
可以给楼主举个简单的例子,你在用百度autosuggest或者Google得autosuggest得时候,当网速比较慢的时候,你输入的字还没有来得及给你列出联想出来的词语,但是这个时候你仍然可以接着往下输入要搜索的字符串
楼上的意思就是说采用异步方式之后,当向服务器发送请求时,用户还可以操作页面其他控件。这个我知道。但是上面的代码中:xmlobject.Onreadystatechange=verify;表示向xmlobject这个对象注册一个监听函数,随时监听返回的状态,由于采用的是异步,当然应该在注册之后执行后面的语句呀。。。。百思不得其解,恳请高手能够指点迷津。。。。
问题是你的aleat语句在if(xmlobject.readyState==4){ },所以是成功后再调用
打个比方.
早上起床,先刷牙,再烧水,等水烧开了洗脸,再整理发型.是同步
先刷牙,再烧水,再整理发型,等水壶滴的一声通知我水烧开了,我再取刚烧开的水洗脸,是异步.