Несколько запросов AJAX в jQuery - PullRequest
7 голосов
/ 10 февраля 2011

У меня есть функция, которая извлекает данные из двух мест и помещает возвращенное содержимое в модальное диалоговое окно, отображаемое для пользователя.

Оба запроса являются асинхронными, поскольку они являются междоменными.Проблема заключается в том, что я не хочу отображать модальные, пока оба запроса не закончили загрузку.Как я могу убедиться, что оба запроса завершены перед загрузкой модального?

Я попытался поместить функции openModal в обработчик успеха второго запроса, который работает, когда первый запрос заканчивает загрузку до второго запроса., но иногда это не так.

Вот копия моего кода:

function loadData(id) {
$.ajax({
    type: 'GET',
    url: 'https://someurl.com/v1.0/controller1/' + id,
    dataType: 'jsonp',
    success: function(data) {
        // Do some stuff to the data
    }
});

$.ajax({
    type: 'GET',
    url: 'https://someurl.com/v1.0/controller2/' + id,
    dataType: 'jsonp',
    success: function(data) {
        // Do some stuff to the data

        openModal();
    }
});
}

function openModal() {
// Open the modal
}

Ответы [ 3 ]

10 голосов
/ 10 февраля 2011

Ознакомьтесь с новой версией jQuery - 1.5. Он имеет поддержку именно вашей проблемы, вы можете проверить это сообщение в блоге для решения вашей проблемы: http://www.erichynds.com/jquery/using-deferreds-in-jquery/

0 голосов
/ 18 мая 2014
 $.when(
   $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
        tags: "moon",
        tagmode: "any",
        format: "json"
   }),
   $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
        tags: "bird",
        tagmode: "any",
        format: "json"
   })).then(function (res1, res2) {

  }); 
0 голосов
/ 10 февраля 2011

Вы можете поместить один из запросов ajax в обратный вызов успеха другого запроса, но это будет не так эффективно, как одновременное выполнение обоих запросов. Тогда вам просто нужно поместить вызов openModal в успешный обратный вызов внутреннего ajax-запроса. Не оптимально, было бы быстро и легко исправить, если бы это решение работало на вас, пока не будет найден лучший вариант.

Я буду продолжать думать об этом ...

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