【问题标题】:Synchronous calls with jquery使用 jquery 进行同步调用
【发布时间】:2011-02-25 22:03:02
【问题描述】:

我可以使用 jQuery AJAX API 并进行同步调用吗?

【问题讨论】:

    标签: jquery ajax synchronous


    【解决方案1】:

    就像奥巴马会说的那样:是的,你可以!

    jQuery .ajax()

    设置

    async = false
    

    在 .ajax() 处理程序中可以解决问题。

    【讨论】:

    【解决方案2】:

    虽然 jQuery 可以通过设置 synch:false 属性来进行同步 AJAX 调用,但这会导致浏览器挂起,直到 AJAX 完成。使用像Frame.js 这样的流控制库可以让您在不占用浏览器的情况下进行同步调用:

    $.each(ajaxObjects, function(i, ajaxCall){
        Frame(function(next)){ // declare the callback next here
    
            ajaxCall.complete = function(data){
                // do something with the data
                next(); // go to the next ajax call
            }
            $.ajax(ajaxCall);
    
        });
    }
    Frame.init();
    

    这一系列的 AJAX 调用将按顺序进行,每次都等待前一个完成,不会使浏览器挂起。还有一个额外的好处是数据以可预测的顺序从 ajax 调用返回,而不是异步调用以随机顺序返回。

    【讨论】:

    • 有一点我不清楚,这对我来说很重要:Frame.init() 何时返回您的答案?在所有这些调用完成之前还是之后?
    • Frame.init 只是告诉 Frame,当它收到一个作业时,它应该运行该作业。在 Frame v2 中,它被重命名为 Frame.start。另一种用途是,如果您想向 Frame que 添加一堆东西,但又不希望 Frame 开始运行作业。 Frame 将简单地保留所有作业,直到调用 .start()。
    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多