как использовать jQuery.when() с несколькими запросами jsonp?

У меня есть 2 междоменных запроса jsonp, которые необходимо выполнить, прежде чем можно будет выполнить другой метод. Итак, я попробовал функцию $.when()

$.when(getX(), getY()).then(createXY);

getX() и getY() делают запросы $.ajax() к двум разным доменам с отдельными обратными вызовами jsonp.

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

Может ли кто-нибудь привести пример вызова функции при выполнении нескольких асинхронных запросов jsonp?


person E.A.    schedule 27.03.2013    source источник
comment
Что возвращают getX() и getY()? Они должны возвращать значение, которое возвращает $.ajax().   -  person Matt Ball    schedule 27.03.2013
comment
Избегайте jQuery, когда дело доходит до обещаний потому что и потому что. Лучше использовать полифилл промисов, например lie или es6-обещание.   -  person jaydoubleyou    schedule 21.05.2015


Ответы (2)


Чтобы $.when() работал, ему должен быть передан отложенный объект, которого он ожидает. Убедитесь, что ваши функции getX() и getY() возвращают отложенный объект, созданный вызовом jQuery ajax, который делает каждая из них.

Если вам нужна помощь в этом, опубликуйте код для getX() и getY().

Вот пример прямо из документа jQuery для $.when():

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
  /* a1 and a2 are arguments resolved for the
      page1 and page2 ajax requests, respectively */
  var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
  if ( /Whip It/.test(jqXHR.responseText) ) {
    alert("First page has 'Whip It' somewhere.");
  }
});
person jfriend00    schedule 27.03.2013

очень глупая ошибка в коде. getX() и getY() вызывают $.ajax(), но никогда не возвращают его. оберните вызовы $.ajax() с возвратом, и теперь код работает нормально. Спасибо за вашу помощь!

person E.A.    schedule 30.03.2013