我有一些$ .post()和$()。加载ajax调用,我想在所有这些调用完成后执行一个函数。我知道$ .post()调用返回一个延迟对象,我可以在when()调用中返回:
when(deferred1, deferred2, deferred3).done(function() {});
但是如何从.load()调用中获取一个延迟对象,我可以在()时使用它?
答案 0 :(得分:1)
你不能,load
没有回复承诺,它只接受complete
回调。如果您想将其用作when
调用的一部分,那么您必须构建自己的承诺,并在complete
回调中解决/拒绝它。
最好不要使用load
(它实际上只能为您节省一行),或者编写自己的功能包装它:
function load($el, url) {
var dfd = $.Deferred();
$el.load(url, function (responseText, textStatus, jqXHR)) {
if (textStatus == 'success') {
dfd.resolve();
} else {
dfd.reject();
}
})
return dfd.promise();
}
$.when($.post(...), load($el, url), $post(...), load($el, url)).done(...)