(Ajax相关)多个异步XMLHTTP操作,如何判断前面的已经执行完成

山野村夫 2005-12-01 09:15:54
利用XMLHTTP异步读取服务器上的XML,由于有多个XML,如何能判断前面的已经执行完成了呢?

代码:

function AAA(){
ajax = getXMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) { // loaded
if (ajax.status == 200) {// no http error
outStr = ajax.responseText;
} else {
outStr = outStr;
}
$("AAA").innerHTML = outStr;
}
ajax.open("GET", "http://192.168.0.1/a.XML",True);
ajax.send(null);
}

function BBB(){
ajax = getXMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) { // loaded
if (ajax.status == 200) {// no http error
outStr = ajax.responseText;
} else {
outStr = outStr;
}
$("BBB").innerHTML = outStr;
}
ajax.open("GET", "http://192.168.0.1/b.XML",True);
ajax.send(null);
}


if (AAA();="end") BBB();


...全文
497 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
山野村夫 2005-12-05
  • 打赏
  • 举报
回复
高手太多,加满分好分配8)
山野村夫 2005-12-05
  • 打赏
  • 举报
回复
感谢各位高手
目前准备采用setInterval+全局变量的方法解决这样的问题
ice_berg16 2005-12-03
  • 打赏
  • 举报
回复
既然你要求有先后顺序,当然是同步来做,
不过你可以在AAA来实现

if (ajax.status == 200) {// no http error
outStr = ajax.responseText;
BBB();
}
....
创造奇迹9999 2005-12-03
  • 打赏
  • 举报
回复
UP 學習
tdk84e 2005-12-02
  • 打赏
  • 举报
回复
to:xuzuning(唠叨)
即使异步,也应该能够知道是否已经完成了撒
在实际开发中难免会遇到多个异步操作,且需要确定完成的顺序的情况

还是HTTP的局限性啊
Win开发中,即使异步也是有办法确定是否已经完成的

如果实在不行,只有用全局变量标识的办法了
xuzuning 2005-12-02
  • 打赏
  • 举报
回复
看来你还没有理解ajax的编程方式
异步通讯妙就妙在无须等待某个任务的完成

如果你的某项任务需要依赖前一个任务的完成,那就要采用同步方式了

AAA(); //1
BBB(); //2
alert('ok'); //3

异步方式下3最先有响应,其后是1或2之一,最后是剩下的那个
1和2具体是哪个先有响应,是不能预先确定的。否则就必须使用同步方式

也就是说AAA()和BBB()都必须设计成具有独立工作能力的函数
如果已经做到了这一点,那么“判断前面的已经执行完成”已经不重要了。甚至当页面关闭时,某项任务还未完成,也是可能的
tdk84e 2005-12-02
  • 打赏
  • 举报
回复
dh20156(风之石)
你的这种办法,不会弹出alert

目前我只想到用setInterval

function CCC(){
if (flag)
{
alert("end");
clearInterval(timename);
}
}

var timename=setInterval("CCC();",1);
AAA();

在CCC中等待异步调用完成
运行时IE会有点拖滞的感觉,如果计算机的性能比较差,可能会出现假死现象8(
dh20156 2005-12-02
  • 打赏
  • 举报
回复
TRY:
var flag = false
AAA(){
....
if(???){flag = true}
....
}
if(flag){
alert("kkk");
}
gu1dai 2005-12-02
  • 打赏
  • 举报
回复
这个问题很有价值。
tdk84e 2005-12-02
  • 打赏
  • 举报
回复
看看
山野村夫 2005-12-01
  • 打赏
  • 举报
回复
难道只能用setInterval吗
山野村夫 2005-12-01
  • 打赏
  • 举报
回复
如果是这样呢?
AAA();
alert("kkk");

如果AAA()还没有执行完,会先弹出alert
怎么办呢?
山野村夫 2005-12-01
  • 打赏
  • 举报
回复
设一个全局变量来判断吗?
lisoon 2005-12-01
  • 打赏
  • 举报
回复
if (ajax.status == 200)
在这一步设置一个变量为true就行了,然后做下判断

87,910

社区成员

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

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