我正在从for循环中进行XMLHttpRequest open()调用。循环遍历一组链接。我想等到readyState变为4(响应到来)才进入下一次迭代。我怎么能这样做吗?请帮忙
答案 0 :(得分:1)
不是使用for循环来控制迭代,而是设置一个对象:
1)在创建时传递'nextIter'回调对象
2)进行自己的通话
3)然后在readystate4上......
3a)是否有自己的处理
3b)调用成员'nextIter'函数。该对象将是同一对象的另一个实例。
这样你的for循环只会创建一个对象结构,
objA< whenreadystate4 refs> objB< whenreadystate4 refs> objC ......
...当每个ajax调用完成时,调用会链接起来,并委托链中的下一个...直到底部元素引用null。
希望这是有道理的。
答案 1 :(得分:0)
顺便说一下,我的现有程序看起来像这样,我想等到readyState变为4才进入下一次迭代
onMenuItemCommand: function() {
var i;//iteration value of the loop
var xhr=new XMLHttpRequest();//create the XMLHttp request
var e=content.document.getElementsByTagName('a');// get all the links in the content page
for( i=0;i<e.length;i++){ // loop goes through the selected links
webassist.setLink(e[i]); //set the link element
if(e[i]!=""){ // check the link's href value is null
xhr.open('HEAD',e[i] ,true);
xhr.send(null);
}
else{ //if the href value is null set it to color red
webassist.setColor("#FF0000");//red
}
xhr.onreadystatechange=function(evnt){
if(xhr.readyState==4){
if(xhr.status==200){
webassist.setColor("#99FF66");//green
}
else{
webassist.setColor("#FF0000");//red
}
}
else{
webassist.setColor("#FF00FF"); //pink
}
}
}
}