JQuery deferred.done立即执行预定义函数,但不在内部声明函数

时间:2014-10-26 17:42:37

标签: jquery ajax .when

我的问题很奇怪,如标题所述。这是代码:

案例1:

    var first = $.ajax({ // about 500ms request
        url: myUrl
        success: function() { console.log(1); }
    });

    var second = $.ajax({ // about 200 ms request
        url: myUrl
        success: function() { console.log(2); }
    });


    $.when(first, second).done(function() { console.log(3); });

记录2,1,3。一切都很好,就是我想要的。

案例2:

    var first = $.ajax({ // about 500ms request
        url: myUrl
        success: function() { console.log(1); }
    });

    var second = $.ajax({ // about 200 ms request
        url: myUrl
        success: function() { console.log(2); }
    });

    function logthree() {
        console.log(3);
    }


    $.when(first, second).done(logthree());

记录3,2,1,这是一个问题。 logthree()函数应该只执行第一次和第二次解析。

为什么会这样?如何在没有任何问题的情况下使用案例2?

注意:如果第一个和第二个是函数并且它们返回$ .ajax,则会发生同样的事情。

注意:如果第一个和第二个都是$ .get。

,就会发生同样的事情

2 个答案:

答案 0 :(得分:0)

试试这个..

`$ .when(第一,第二).done(logthree);

答案 1 :(得分:0)

更改为:

$.when(first, second).done(logthree);

您正在执行logthree()并将返回结果传递给.done()。您需要将函数引用传递给仅.done()的{​​{1}}而不包含parens。当您添加parens时,它会指示JS解释器立即执行它。这是一个常见的错误。