AJAX回调后的jQuery .done

时间:2012-12-21 19:09:05

标签: jquery

我正在尝试在AJAX调用完成后运行一些东西:

$.ajax({
    url: url,
    success: //do stuff
}).done(function (){
    $('#listings').fadeIn(800).done(function(){
        $('#loading').fadeOut(800);
    });
});

这不是$('#loading').fadeOut(800);的最后一部分,它应该在$('#listings').fadeIn(800)完成时开始。

2 个答案:

答案 0 :(得分:6)

fadeIn()实际上不是那种返回promise的函数,但它确实有一个你可以使用的回调函数:

$.ajax({
    url: url,
}).done(function (){
    $('#listings').fadeIn(800, function(){
        $('#loading').fadeOut(800);
    });
});

答案 1 :(得分:6)

要从动画中获取promise对象,请使用.promise

$.ajax({
    url: url,
    success: handler
}).done(function (){
    $('#listings').fadeIn(800).promise().done(function(){
        $('#loading').fadeOut(800);
    });
});

在这种特殊情况下,在动画中使用回调而不是.promise.done更有意义。使用.promise的优点是它会导致所有选定元素的单个回调,而不是每个元素的一个回调。由于您只是动画一个元素,因此回调将是最好的方法。 (adeneo的回答)

使用.promise还有其他优点,但您似乎不需要它们。 (例如$.when