Собственно асинхронную очередь я реализовал:
var link_index = 0;
function writeResult(xmlDoc)
{
forumtitle = xmlDoc.getElementsByTagName("forumtitle")[0].childNodes[0].nodeValue;
titles = xmlDoc.getElementsByTagName("title");
links = xmlDoc.getElementsByTagName("link");
len = titles.length;
if (len == 0) return;
document.write('<h1>' + forumtitle + '</h1>');
for (i=0;i<len;i++)
{
link = links[i].childNodes[0].nodeValue;
title = titles[i].childNodes[0].nodeValue;
document.write('<a target="_blank" href="' + link + '">' + title + '</a><br>');
}
}
function asyncHandler()
{
if (this.readyState != 4)
return;
if (this.status == 200)
{
writeResult(this.responseXML);
link_index++;
runXMLRequest();
}
}
function runXMLRequest()
{
if (link_index>=linkArray.length)
return;
link = linkArray[link_index];
requestLink = 'controller.php?' + link;
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", requestLink, true);
xmlhttp.onreadystatechange = asyncHandler;
xmlhttp.send();
}
// .....
runXMLRequest();
Но работает не как хотелось бы. Появилась другая проблема.
Вообщем я смотрю на консоль (вроде так называется) Firebug. Смотрю что последовательно выполняются запросы. После каждого запроса выполняется writeResults().
- Если len равен нулю, то ничего не записывается (это нормально).
- Если len НЕ равен нулю, то записывается результат (document.write). А дальше необычное.
После document.write консоль очищается (до этого был список выполненных запросов) и через пару секунд появляется очередной запрос, который успешно выполнен (200 OK) и список обнаруженных ошибок:
Цитата:
|
attempt to run compile-and-go script on a cleared scope
if (this.readyState != 4)
|
Причем 3 штуки и ссылаются на одну строку.
И следующие запросы не выполняются.
Как с этим быть?