我有一个基本上看起来像这样的函数:
function defTest()
{
var dfd = new jQuery.Deferred();
$.ajax(
{
type: "GET",
url: 'http://XXXX',
cache: false,
dataType: "json",
success: function(data,status)
{
console.log('ajax done: success');
dfd.resolve();
},
error: function(data,status)
{
console.log('ajax done: fail');
dfd.reject();
}
});
console.log('about to return dfd');
return dfd;
}
我这样称呼它:
defTest().then(.....);
控制台日志产生:即将返回 dfd code.js:106 ajax done:success code.js:96
让我感到困惑的是代码似乎有效。仍然在 ajax 完成之前返回 dfd。所以我删除了return dfd。并将它放在每个 ajax 处理函数的最后,以确保在 Ajax 完成之前不会返回它。:
success: function(data,status)
{
console.log('ajax done: success');
dfd.resolve();
return dfd;
}
然后它根本不起作用。我很困惑!有人可以向我解释为什么我的 deferred 不能在 ajax 成功和错误处理程序中,以及为什么即使我的 deferred 对象在 Ajax 完成然后被解决或拒绝之前被触发,它似乎也返回了?这怎么可能呢?
编辑:这个问题直接链接到我之前的未回答和更复杂的功能: 延迟对象的问题
这就是为什么我不能只“返回 ajax(...)”,因为我的真实函数包含其他 ajax 调用,这些调用将与返回给调用者的 ONE 结果分开。