несколько асинхронных вызовов $ .ajax с последующей функцией после выполнения всех - PullRequest
1 голос
/ 02 августа 2011

Я делаю 3 асинхронных ajax-запроса.

После этого мне нужно выполнить функцию, но только если все 3 запроса завершены.

Как бы мне этого достичь?

Из-за нашей платформы я ограничен последней версией 1.4.

Спасибо, Уэсли

Ответы [ 4 ]

2 голосов
/ 02 августа 2011

Вам нужно, чтобы все обработчики ответов вызывали одну и ту же область видимости / функцию и отслеживали возвращенные запросы там. Двигайтесь дальше, только если все запросы возвращаются. Не забывайте обрабатывать ошибки.

0 голосов
/ 16 января 2013

Разбираясь с ответом Андрюса, я все время делаю что-то похожее на его:

function f1(){
  $.ajax({
    url: "test.html",
    success: function(data){
      //do something
      f2();
    }
  });
}

function f2(){
  $.ajax({
    url: "test2.html",
    success: function(data){
      //do something else
      //maybe call f1() if you want to loop again?
    }
  });
}

Я соединяю множество вызовов таким образом.Иногда я ставлю setTimeout(function(){f2()},1000); Если я хочу сделать небольшую паузу между вызовами.

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

0 голосов
/ 03 августа 2011

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

$.ajax({
  url: "test.html",
  success: function(){
    $.ajax({
      url: "test2.html",
      success: function(){
        // n level nesting
      }
    });
  }
});
0 голосов
/ 02 августа 2011

Вы можете достичь этого с помощью Reactive Extension для jQuery. Посмотрите на этот вопрос: событие триггера после нескольких успешных вызовов ajax

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