Jquery Ajax:只有在新内容完全加载时才淡入

Jquery Ajax:只有在新内容完全加载时才淡入,jquery,ajax,Jquery,Ajax,我不知道这种技术是否错误,但我真的只希望新内容在满负荷时淡入。似乎beforeSend和complete send在时间上没有效果。甚至在幻灯片出现之前,新内容就会淡入淡出,f.e 我还不太熟悉ajax,你一定知道 这是我的密码: $(function(){ var replacePage = function(url) { $.ajax({ url: url, type: 'get', dataT

我不知道这种技术是否错误,但我真的只希望新内容在满负荷时淡入。似乎beforeSend和complete send在时间上没有效果。甚至在幻灯片出现之前,新内容就会淡入淡出,f.e

我还不太熟悉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);
    });
});

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

success: function(data){
                var dom = $(data);
                var html = dom.filter('#content').html();
                $('#content').html(html).hide().fadeIn();
            },
请记住从完整调用中删除fadeIn()。

尝试以下操作:

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()
方法。

将您的
$(“#内容”).hide()
放在beforeSend方法中。感谢您的快速回复。但还是一样。在菜单滑动之前,新内容已经淡入。此外,您应该使用
.on()
,而不是
bind()
live()。哇,我不知道那件事!非常酷,到目前为止似乎效果不错。但我总是会遇到fadeIn并不总是完美地执行,它会闪烁,好像还有一点要加载。加载内容中的第三方工具(如soundcloud player)会影响fadeIn吗?我如何才能真正确定在beforeSend未完成之前不会发生任何事情?菜单应该先向上滑动,然后内容可以加载到它必须加载的内容,但它应该只在菜单向上滑动时出现。我以前以为Presend会这么做,但实际上不是这样。我用错了吗?在send是ajax事件,hide()和slideUp()是动画方法之前,您可以使用slideUp的回调函数,比如
$(“.menue”).slideUp(function(){$.ajax()})
它首先滑动菜单,然后开始发送ajax请求感谢添加的信息。但我必须回到这里。新内容有时仍在闪现。我在没有任何第三方内容的情况下尝试了它(比如soundcloud、vimeo),然后它就正常工作了。我的问题是:有没有一种简单的方法可以说所有第三方工具都应该在“完全加载”的预加载范围内,或者说处理这个问题要复杂得多?你能给我一个指示吗?@mellos,正如你所说,这可能很复杂,取决于第三方脚本的工作方式。你发布了另一个问题,我在那里发布了另一个答案,你试过了吗?是的,完善你的另一个答案!非常感谢。所以没有什么可以确保第三方内容也完全加载到ajax调用中?喜欢简单的方法吗?或者我应该看什么方向?