Я хотел бы запросить цикл 100 раз по запросу ajax с циклом for. Это мой код:Ajax request in for loop
for(var i=1; i<100; i++)
{
var num = i+1;
var request = new XMLHttpRequest();
request.open("GET", "http://localhost/test/1/2/main.php?t="+num+"", true);
request.send(null);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var parser = new DOMParser();
var doc = parser.parseFromString(request.responseText, "text/html");
var rows = doc.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr");
var sum = 0;
for(var j=0; j<rows.length;j++)
{
sum += parseInt(rows[j].getElementsByTagName("td")[7].textContent.trim());
}
alert(num);
}
}
}
Но это не работает. В консоли я вижу 100 раз эту информацию:
XHR finished loading: GET " http://localhost/test/1/2/main.php?t=2 ". XHR finished loading: GET " http://localhost/test/1/2/main.php?t=3 ".
т.д. Так что все должно быть в порядке. Но я вижу предупреждение только 14 раз (я не сейчас почему 14), нет 100.
Почему эта программа не работает?
Не могли бы вы попробуйте использовать для цикл внутри функции onreadystatechange, потому что вы на самом деле вызываете его столько раз. Вы хотите сделать это, или только ваш код внутри этой функции, который нужно загружать 100 раз? – Owner
При удалении 'если (request.readyState == 4)' я получаю предупреждение 11times и консоль показывает эту ошибку (?): 'неперехваченным TypeError: Не удается прочитать свойство 'getElementsByTagName' из undefined' в строке' вар rows = doc.getElementsByTagName ("table") [0] .getElementsByTagName ("tbody") [0] .getElementsByTagName ("tr"); ' – Star089
Просто рекомендация: вызовы Ajax можно упростить, а совместимость с crossbrowser гарантирована, когда используя [jQuery] (http://jquery.com) и его ['jQuery.ajax()') (http://api.jquery.com/jQuery.ajax/). – SaschaM78