Шаблон JQuery для нескольких непрерывных запросов AJAX - PullRequest
4 голосов
/ 22 апреля 2011

У меня есть для каждого цикла с массивом, для каждого элемента в массиве мне нужно получить данные с сервера, поэтому я сделаю запрос ajax для каждого элемента и сохраню результат в другом массиве, мне нужно знать, когда последний элемент в массиве был обработан, так что я могу отобразить данные, есть ли шаблон или как я могу это сделать, не слишком усложняя вещи, которые я думаю, что я делаю

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011
var array = ['a', 'b', 'c'],
    arrayLength = array.length,
    completed = 0;

Затем в обратных вызовах вашего XHR,

if (completed == arrayLength) {
   // All of them have finished.
}

completed++;

В качестве альтернативы, вы заявляете, что добавляете вещи в новый массив.Предполагая, что по окончании массивы будут иметь одинаковую длину, вы можете изменить проверку в обратном вызове на (startArray.length == newArray.length).

Кроме того, имейте в виду, если вы делаете XHR (предполагая асинхронный) в цикле, онивсе будут пытаться запросить примерно в одно и то же время (я думаю), что может быть проблемой с производительностью.Подумайте о том, чтобы написать функцию, которая вызывается снова при каждом обратном вызове каждого отдельного запроса, поэтому XHR создаются по одному за раз.Увеличьте счетчик, чтобы вы могли подписывать следующий элемент массива при каждом вызове.

1 голос
/ 27 апреля 2011

Библиотека передачи продолжения, имеющая «параллельный» режим, будет хорошо абстрагироваться. Я использую JooseX-CPS , также смотрите его учебник .

0 голосов
/ 22 апреля 2011

Для каждого успешного завершения подсчитывайте успешные результаты и затем запускайте событие.

Например:

var successfulReturns= 0; 
$.ajax({ 
    url:"", 
    success: function() { 
        successfulReturns++; 
        $(document).trigger("myapp.loadedComplete"); 
    }
}); 

и затем прослушивайте ваше событие

$(document).bind("myapp.loadedComplete", function() {  } );

Это позволяет вам проверить завершение где-нибудь за пределами цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...