确保在jQuery中完成所有异步调用

Nik*_*as9 0 javascript jquery

我有一个webapp,它使用jQuery:s $ .get和$ .post方法进行一系列异步API调用.在激活按钮(display:none/block)之前,我需要确保所有这些都已成功完成(HTTP状态代码200).

有没有办法确保没有未完成的异步调用在jQuery中等待开箱即用?或者我是否需要自己跟踪?

我正在使用jQuery v1.8.3.

Mat*_*att 5

您可以创建一个"Master Deferred",它只会在所有其他Deferred(AJAX请求)成功完成时解析;

jQuery.when(jQuery.get('/foo'), jQuery.post('/bar'), jQuery.get('/baz')).done(function () {
    $('button').show();
});
Run Code Online (Sandbox Code Playgroud)

语法是将每个Deferred作为参数传递给jQuery.when(),返回一个Deferred在一个失败时或在所有这些都完成时解析的参数.

如果你事先不知道你有多少AJAX请求,已经将它们放在一个数组中,或者只是不想使用上面的那些,你可以这样使用Function.apply;

var ajaxRequests = [jQuery.get('/foo'), jQuery.post('/bar'), jQuery.get('/baz')];

jQuery.when.apply(jQuery, ajaxRequests).done(function () {
    $('button').show();
});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://api.jquery.com/jQuery.whenhttp://www.mattlunn.me.uk/blog/2014/01/tracking-joining-parallel-ajax-requests-with- jquery/ (我的博客)