$ .when дает другой результат, когда $ .ajax встроен, а $ .ajax возвращается функцией - PullRequest
0 голосов
/ 04 декабря 2018

Использование jquery 1.12 Мне нужно подождать результатов двух вызовов AJAX, прежде чем идти дальше.Когда я использовал $.when, я не понимаю, почему я не получаю те же результаты, когда я передаю $.ajax напрямую и когда я возвращаю $.ajax из вызова функции.

Это работает.В done часть func1 представляет собой массив с func1[0] возвращаемыми данными:

$.when($.ajax({
  url: url1,
  type: 'GET',
  dataType: 'json',
  xhrFields: {
    withCredentials: true
  },
  headers: {
    Accept: "application/json; charset=utf-8"
  },
  success: function (data){
    debugger;
  } 
}), $.ajax(...)
).done(function(func1, func2) {
  debugger;
})

Это не так.В done part func1 есть undefined:

var myfunc = function() {
  return $.ajax({
    url: url1,
    type: 'GET',
    dataType: 'json',
    xhrFields: {
      withCredentials: true  
    },
    headers: {
      Accept: "application/json; charset=utf-8"
    },
    success: function (data) {
      debugger;
    }   
  });
}

$.when(myfunc(), $.ajax(...)).done(function(func1, func2) {
  debugger;
})

Во втором случае я просто обернул первый ajax-вызов в функцию.

EDITED

Проблема решена.Я написал

return 
 $.ajax({
  url: url1,...

вместо

return $.ajax({
  url: url1,...

В первом случае парсер интерпретирует инструкцию как две инструкции: return undefined затем $ .ajax.Инструкция $ .ajax никогда не выполняется, потому что мы уже вышли из функции.

1 Ответ

0 голосов
/ 04 декабря 2018

Если func1 не определено, возможно, myfunc() ничего не возвращает?Если вы не передаете myfunc как имя функции вместо вызова функции, например, $.when(myfunc, $.ajax()) ...?

...