3

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

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

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

4

2 回答 2

6

fadeIn()并不是真正返回承诺的那种函数,但它确实有一个可以使用的回调函数:

$.ajax({
    url: url,
}).done(function (){
    $('#listings').fadeIn(800, function(){
        $('#loading').fadeOut(800);
    });
});
于 2012-12-21T19:09:40.310 回答
6

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

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

在这种特殊情况下,使用回调而不是动画更有.promise意义.done。使用的优点.promise是它会为所有选定元素产生一个回调,而不是每个元素一个回调。由于您只为一个元素设置动画,因此回调将是最好的方法。(阿德尼奥的回答)

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

于 2012-12-21T19:12:20.070 回答