等待$ .post和.load()ajax调用完成

时间:2014-11-07 15:39:13

标签: jquery ajax

我有一些$ .post()和$()。加载ajax调用,我想在所有这些调用完成后执行一个函数。我知道$ .post()调用返回一个延迟对象,我可以在when()调用中返回:

when(deferred1, deferred2, deferred3).done(function() {}); 

但是如何从.load()调用中获取一个延迟对象,我可以在()时使用它?

1 个答案:

答案 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(...)