Есть ли способ заставить набор вызовов jquery ajax в очередь? - PullRequest
2 голосов
/ 06 августа 2010

У меня есть массив данных (arrData), который я зацикливаю (10 элементов), вызывая ajax-запрос для каждого. В настоящий момент каждый вызов ajax выполняется параллельно. Это означает, что сервер получает 10 вызовов одновременно и отправляет данные обратно в любом порядке, в котором он рассчитывает каждый раз. Чтобы немного освободить сервер, я хочу теперь поставить свои вызовы в очередь. Следовательно, когда ajax получает один набор данных, он вызывает следующий поиск. Есть ли способ сделать это встроенным в JQuery или я должен взломать свой цикл и добавить рекурсивный обратный вызов для каждого?

$.each(arrData, function(k,v) {
    $.getJSON(lookupPath,
        { key:k, val:v },
        function(data) {
            console.log(data); //loopback here?
        }
    );
});

ОБНОВЛЕНИЕ: я пошел со следующим (как предложено Скоттом М.), чтобы сделать это:

function doLookup() {
    if(k < arrData.length) {
        var v = arrData[k];
        $.getJSON(lookupPath,
            { key:k, val:v },
            function(data) {
                console.log(data);
                k++;
                doLookup();
            }
        );
    }
}

var k = 0;
doLookup();

Ответы [ 3 ]

3 голосов
/ 06 августа 2010

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

EDIT:

В ответ на комментарий ниже:

если вам абсолютно необходимо, чтобы вызовы были последовательными, то вам нужно будет рекурсивно вызывать метод getJSON(). Это гарантирует, что ваши запросы AJAX будут отдельными и в порядке.

0 голосов
/ 06 августа 2010

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

0 голосов
/ 06 августа 2010

ajax в jQuery имеет возможность включить синхронный режим или нет.

$.ajax({async: false});

http://api.jquery.com/jQuery.ajax/

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