$.when выдает другой результат, когда $.ajax встроен, а $.ajax возвращается функцией

Используя 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 часть 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 в функцию.

РЕДАКТИРОВАНИЕ

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

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

вместо

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

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

1 ответ

Решение

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

Другие вопросы по тегам