【问题标题】:Is using .done synonymous with async: false?使用 .done 是否与 async: false 同义?
【发布时间】:2014-03-18 15:31:59
【问题描述】:

我有一大堆 $.ajax 请求需要在启动之前相互等待。我知道 async : false 选项已被弃用,而且我也知道如果我将后续函数粘贴在 .done 中,那么它的行为方式与 async : false 相同。然而,为了保持清洁,我想知道是否可以作为替代方案,我可以离开 .done 而无需额外的代码,只需从“上到下”订购我的 ajax:这会告诉 jquery 运行 ajax,then 执行 .done 中的任何内容(在我的情况下没有!),“模仿”异步:false?

举个例子:

$.ajax({type: 'POST',
        data: cool_data : "cool_data",
        url: 'somewhere_over_the_rainbow.php'
        }).done(function(){

        })
$.ajax({type: 'POST',
        data: more_cool_data : "more_cool_data",
        url: 'more_somewhere_over_the_rainbow.php'
        }).done(function(){

        })

谢谢!

【问题讨论】:

    标签: javascript jquery ajax asynchronous


    【解决方案1】:

    没有。

    done 注册了一个回调,当服务器应答时将被调用。

    使用async:false 会阻止页面,直到服务器应答。 不要使用它

    链接您的呼叫的解决方案是使用then

    $.ajax({ ... })
    .then($.ajax({ ... })
    .then($.ajax({ ... })
    .then(function() { ... finished! ... });
    

    【讨论】:

    【解决方案2】:

    为什么不使用complete 函数?

    $.ajax({type: 'POST',
            data: cool_data : "cool_data",
            url: 'somewhere_over_the_rainbow.php',
            complete: function()
            {
                $.ajax({type: 'POST',
                    data: more_cool_data : "more_cool_data",
                    url: 'more_somewhere_over_the_rainbow.php',
                    complete: function() 
                    { 
                        // do something else
                    }
                });
            });
    

    【讨论】:

    • OP 知道这一点,我想。他的问题是:“一大堆 $.ajax 请求 [...] 保持清洁”
    • 我已经考虑过了,但是有 20 个左右的 ajax 调用,看起来嵌套会有点失控。
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 2018-02-05
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2019-01-26
    相关资源
    最近更新 更多