使用XMLHttpRequest的open()函数循环访问一些URL

时间:2010-08-08 18:16:02

标签: javascript ajax xmlhttprequest

我正在从for循环中进行XMLHttpRequest open()调用。循环遍历一组链接。我想等到readyState变为4(响应到来)才进入下一次迭代。我怎么能这样做吗?请帮忙

2 个答案:

答案 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
      }
    }
  }  
}