$.when 当 $.ajax 是内联与 $.ajax 由函数返回时产生不同的结果

$.when produces different result when $.ajax are inline vs $.ajax are returned by a function

使用 jquery 1.12 我需要等待两次 AJAX 调用的结果,然后再继续。当我使用 $.when 时,我不明白为什么当我直接传递 $.ajax 和当我从函数调用 return 传递 $.ajax 时我没有得到相同的结果.

这行得通。在 done 部分 func1 是一个数组, func1[0] 是数据 returned:

$.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 部分 func1undefined:

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 指令永远不会执行,因为我们已经退出了函数。

如果 func1 未定义,也许 myfunc() 没有返回任何内容?您不应该将 myfunc 作为函数名称而不是函数调用传递,例如$.when(myfunc, $.ajax())...?