3

我有一个关于 jQuery 的 AJAX 函数的快速问题。

我执行 ajax 调用的方式如下:

$.ajax({
    type: "GET",
    url: "/wordpress/wp-admin/admin-ajax.php",
    dataType: 'html',
    data: ({ action: 'loadHomePage'}),
    beforeSend: function() {
        document.getElementById('loading').style.visibility = 'visible';
    },
    complete: function(){
        FB.Canvas.setAutoGrow(false);
        FB.Canvas.setSize({height:600});
        setTimeout(function(){
            FB.Canvas.setAutoGrow(true);
        }, 100);
    },
    success: function(data){
        data = $.trim(data);
        $('#ajax-content').hide().empty().fadeIn('slow').html(data);
        FB.Canvas.scrollTo(0,0);                
    }
});

问题是,在这种特殊情况下,它是一个使用 ajax 进行页面导航的 facebook iframe 内的完整网站,在页面之间导航时,它似乎会多次淡化内容,所以我想知道这里的最佳做法是什么部分淡出 - 它应该进入完整部分吗?

我最初完成了调整大小的工作,但移动了它,我认为它有所作为,但不确定它是否是安慰剂效应....

如果是这样,我是否通过执行以下操作来实现它:

complete: function(data){
    // fade in etc

其次,如果在源代码的排序中完成在成功之前,是否可以这样做,或者顺序很重要,例如成功然后完成?

4

2 回答 2

5

'complete' 触发并在 'success' 和 'error' (无论哪个适合您的请求)之后请求周期结束,其时间与您在源代码中声明它的位置无关。

完整的函数不接收 'data' 参数,因此如果您的操作依赖于数据,那么它不会在那里工作。

于 2012-08-28T13:47:10.950 回答
4

completesuccessorerror回调被执行后执行。

所以你会得到那些可能的链条

success-->complete

error-->complete

您可能只想处理成功的呼叫。

于 2012-08-28T13:44:27.787 回答