перебрать некоторые URL с помощью функции open () из XMLHttpRequest - PullRequest
0 голосов
/ 08 августа 2010

Я делаю вызов XMLHttpRequest open () из цикла for. Цикл перебирает набор ссылок. Я хочу дождаться, пока readyState станет 4 (ответ приходит), прежде чем перейти к следующей итерации. Как я могу сделать это? пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 08 августа 2010

Вместо того, чтобы использовать цикл for для управления итерациями, установите объект, который:

1) При создании передается объект обратного вызова nextIter

2) Создает собственный вызов

3) затем на readystate4 ...

3a) выполняет свою обработку

3b) Вызывает функцию-член nextIter.Этот объект будет другим экземпляром того же объекта.

Таким образом, ваш цикл for просто создаст структуру объекта, где

objAobjBobjC ...

... и вызовы просто объединяются в цепочку после завершения каждого вызова ajax, и делегируются следующему в цепочке ... до тех пор, пока нижний элемент не будет ссылаться на нуль.

Надеюсь, это имеет смысл.

0 голосов
/ 09 августа 2010

Кстати, моя существующая программа выглядит следующим образом, и я хочу подождать, пока 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
      }
    }
  }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...