Вем привет. Задача отправить запрос и получить ответ в цикле, цикл может быть разным, вот код:
for (i=0; i<5; i++) {
var id = 'id_'+i;
var id_send = document.getElementById(id).value;
var id_result = 'result_'+i;
var http = createRequestObject();
if( http ) {
http.open('get', 'name.php?send_id='+id_send);
http.onreadystatechange = function () {
if(http.readyState == 4) {
document.getElementById(id_result).innerHTML=http.responseText;
return;
}
}
http.send(null);
} else {
document.location = 'index.php';
}
}
результат вставляется в id='id_result' в таблицу, но проблема в том, что результат получает только последний, и заполняется результат в таблице только последняя строка
Я уже всю голову сломал Уже все перепробовал что только можно
Методом alert(i); выяснил, что до строки http.onreadystatechange i выдает согласно циклу, а уже внутри http.onreadystatechange выдает номер последнего цикла
window.onload = function(){
for (i=0; i<4; i++) {
id = "distribution_id_"+i;
distribution_id = document.getElementById(id).value;
id_result = "result_send_"+i;
var http = createRequestObject();
if( http ) {
http.open("get", "func.php?send_distribution="+distribution_id, true);
/* ЗДЕСЬ alert(i) выдает номер согласно циклу от 0 до 4 */
http.onreadystatechange = function () {
/* ЗДЕСЬ alert(i) выдает номер 4 */
if(http.readyState == 4) {
document.getElementById(id_result).innerHTML=http.responseText;
return;
}
}
http.send(null);
} else {
document.location = "index.php";
}
}
}
Методом alert(i); выяснил, что до строки http.onreadystatechange i выдает согласно циклу, а уже внутри http.onreadystatechange выдает номер последнего цикла
А чему вы удивляетесь делая асинхронные запросы... хотите что бы цикл ждал... делайте синхронные запросы:
ну а что ему еще посоветовать? есть два пути, либо сделать просто синхронно, либо все переделать иначе и по другому принципу. Но то что синхронно конечно не хорошо.