多个ajax和非ajax函数之后的回调

时间:2014-04-15 13:56:53

标签: javascript jquery ajax asynchronous callback

我正在学习在两个函数成功结果之后执行回调,其中一个函数是ajax,一个是非ajax(两者都是异步的)。在我的脚本中有一个非ajax调用,用于在程序开始时加载多个图像,以及一个ajax(JQuery)调用,用于向脚本中的变量请求带有数据的JSON。我发现了JQuery的when()函数用于进行多个ajax调用,我发现this answer用于在回调之前发出多个请求,这可能是hackable。我正在追逐我的尾巴并寻找关于是否或如何使函数在多个混合函数之后执行回调的一些建议。提前感谢您的想法!

1 个答案:

答案 0 :(得分:2)

$.when实际上会接受多个延迟对象,因此您可以执行以下操作:

var xhr = ajax();
var images_promise = loadImages();

$.when.apply($, [xhr, images_promise]).done(function () {
    // something to do when both are complete
});

如果ajaxloadImages函数返回promise对象:

function ajax() { 
    return $.ajax({
        // ajax configuration
    });
}

function loadImages() { 
    // create the deferred promise object
    var dfd = new jQuery.Deferred();
    $("img").on('load', function() { 
        // on the load event resolve the promise
        dfd.resolve();
    });
    return dfd;
}

详细了解延期承诺here