У меня следующая ситуация: мне нужно делать синхронизированные запросы Ajax внутри цикла и отображать возвращаемый результат после каждой итерации в элементе div (добавляется сверху, а предыдущие результаты внизу). Время ответа на каждый запрос может быть разным, но порядок, в котором он должен отображаться, должен быть таким же, как и отправленный. Вот пример с 3 запросами. Допустим, запросу «А» нужно 3 секунды, «В» - 1 секунда, а «С» - 5 секунд. Порядок, в котором я хочу отобразить результат: A, B, C, поскольку запросы были выполнены, но код, который я использую, показывает результаты в B, A, C.
Вот код (запрос JQuery Ajax):
$(document).ready(function(){
var json = document.getElementById("hCategories").value;
var categories = eval( '(' + json + ')' );
for(curCat in categories) {
curCatKey = categories[curCat]['grKey'];
$.ajax({
type: "POST",
url: "get_results.php",
data: "category=" + escape(curCatKey) +
"&search=" + escape($("#hQuery").val()),
timeout: 8000,
async: false,
success: function(data) {
$("#content").append(data);
}
});
});
Я думал, что это сработает с "async: false", но затем он ждет, пока не завершится каждый вызов Ajax, и представит результаты после цикла. Я надеюсь, что некоторые из вас могут указать на некоторые различные решения, я в значительной степени застрял.
Спасибо заранее,
Ура Крис
РЕДАКТИРОВАТЬ: Спасибо за все возможные решения, я попробую их сейчас один за другим и вернусь с тем, который соответствует моей проблеме.