【问题标题】:Callback after multiple ajax and non-ajax functions多个 ajax 和非 ajax 函数后的回调
【发布时间】:2014-04-15 13:56:52
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery ajax asynchronous callback


    【解决方案1】:

    $.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

    【讨论】:

    • 好的,我想我需要阅读一下 promise 对象——我认为我编写的 loadImages 函数中还没有 promise 对象。
    • @gromiczek 听起来不错。我在下面添加了一个非常简单的使用延迟承诺的示例以供参考。祝你好运!
    • 那么,在解决了延迟对象之后,如何从这些函数中的每一个返回一些内容(图像或 JSON)?对象中是否有保存返回数据的属性?我确定这在文档中的某个地方...
    • 它应该在帖子底部的延迟承诺链接中详细说明。基本上,您需要通过延迟对象的解析方法传递数据。像dfd.resolve({name: 'Dan'}); 这样的东西。然后在.done(p1,p2)方法中,参数p1p2就是你通过resolve方法传递的数据和ajax调用返回的数据。
    • @gromiczek 如果可能的话,发帖html, css js ?也许,另见stackoverflow.com/questions/22572795/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多