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

时间:2018-12-04 09:06:09

标签: jquery ajax .when

使用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部分,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,...

在第一种情况下,解析器将指令解释为两条指令:先返回undefined,然后返回$ .ajax。 $ .ajax指令永远不会执行,因为我们已经退出了该函数。

1 个答案:

答案 0 :(得分:0)

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