Ajax:只有在满载时才淡入新内容

时间:2012-07-22 03:15:38

标签: jquery ajax

我不知道这种技术是否错误但我真的只希望新内容在满载时淡出。看起来像beforeSend和完整发送对时间没有影响。即使在上滑之前,新内容也会逐渐消失,等等。

我还不熟悉你必须知道的ajax。

这是我的代码:

$(function(){
    var replacePage = function(url) {

        $.ajax({
            url: url,
            type: 'get',
            dataType: 'html',
            beforeSend: function() {    
                $(".menue").slideUp();
            },
            success: function(data){
                var dom = $(data);
                var html = dom.filter('#content').html();

                $('#content').html(html);

            },
            complete: function(){
                $("#content").fadeIn(); 
            }
        });
    }

    $('nav a').live('click', function(e){
        history.pushState(null, null, this.href);   
        replacePage(this.href);
        e.preventDefault();
    $("#content").hide();
    });

    $(window).bind('popstate', function(){
        replacePage(location.pathname);
    });
});

2 个答案:

答案 0 :(得分:3)

尝试以下方法:

success: function(data){
           var dom = $(data);
           var html = dom.filter('#content').html();
           $(".menue").promise().done(function(){
                $('#content').html(html).fadeIn()
           })
        },

或者您可以使用slideUp()的回调函数,该函数在动画完成后执行:

$(".menue").slideUp('slow', function(){
    $.ajax({
        url: url,
        type: 'get',
        dataType: 'html',
        success: function(data){
            var dom = $(data);
            var html = dom.filter('#content').html();
            $('#content').html(html).fadeIn()
        }
    });
 })

请注意,live()已弃用,您可以使用on()方法。

答案 1 :(得分:1)

将ajax调用中的成功函数更改为:

success: function(data){
                var dom = $(data);
                var html = dom.filter('#content').html();
                $('#content').html(html).hide().fadeIn();
            },

请记住从完整调用中删除fadeIn()。