2009-07-16 2 views
1

http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#xmlhttprequestAJAX readistate break, AJAX не обрабатывает данные достаточно быстро?

4 Загружено Передача данных завершена.

readyState == 4

Я использовал AJAX Framework от W3Schools.

Я хочу обработать данные из группы строк. (поля формы). Я просматриваю элементы формы и отправляю их в сценарий ajax. Затем сценарий ajax отправляет данные через get на php-страницу, которая обрабатывает данные. После завершения обработки данные затем должны отображаться на исходной странице, на которой была вызвана функция.

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

function stateChanged5() 
{ 

    if (request5.readyState==4) 
    { 
     document.getElementById(displayElem).innerHTML=request5.responseText; 
    } 
    else 
    { 
     document.getElementById(displayElem).innerHTML=""; 
    } 
} 

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

ответ

0

Рекурсия ...

var counter = 0; 

function makeRequest() { 
    var xhr = // yada yada yada, get your XmlHttpRequest instance 
    xhr.onreadystatechange = function() { 
    if(this.readyState == 4) { 
     // Do whatever, based on the counter variable 
     counter += 1 
     if(counter < 5) 
     makeRequest(); 
    } 
    else { 
     // Do whatever, based on the counter variable 
    } 
    } 
    xhr.open(); 
} 
+0

Задать запрос передается имя элемента с форума. На исходной странице while цикл повторяется через массив элементов формы и передает его функции makerequest, как бы рекурсия работала с тем, как у меня есть настройки. Я не могу снова вызвать makeRequest, потому что это будет тот же самый элемент, не так ли? – payling

+0

Вам нужно использовать переменную счетчика, чтобы выяснить, какой элемент использовать. Вам нужно будет настроить то, как у вас есть настройки сейчас (подразумевается - при условии, что он не работает!). –

+0

Если вы хотите, чтобы ответ был более адаптирован к вашей настройке, вам нужно разместить больше кода, чтобы проиллюстрировать его. Здесь нет читателей разума. –

1

Подождите, пока результаты каждой строки вернутся, прежде чем начинать запрос на следующий.

+0

Как бы я идти об этом такую ​​вещь? – payling

+0

Использование рекурсии. См. Мой ответ. –

Смежные вопросы