2009-10-11 92 views
3

我想通过jQuery load()做一次AJAX调用,只有一次返回,然后淡出旧内容并淡入新内容。我希望旧内容保持显示状态,直到检索到新内容为止,此时会触发淡入/淡出。如何在fadeOut/fadeIn之前完成jQuery load()的完成?

使用:

$('#data').fadeOut('slow').load('/url/').fadeIn('slow'); 

内容淡入和淡出和片刻以后负载()调用返回,以及数据更新,但淡出已经完成。

回答

7

使用回调来控制调用的顺序。

var $data = $('#data'); 
$data.fadeOut('slow', function() { 
    $data.load('/url/', function() { 
     $data.fadeIn('slow'); 
    }); 
}); 

(注:我不是100%肯定,如果使用var $data = ...$data.doStuff()将实际工作 - 如果这样做,把你从查找股利在DOM树每一次,但如果没有,只是删除了第一行和使用$('#data')无处不在...

+2

以上$ data变量将在其他匿名函数中可用。 – SolutionYogi

+0

您是否在说我的免责声明可以移除? =) –

3

问题是相关的事实,这三个功能,淡出,负载和淡入是异步的。每的abov e函数接受一个回调参数(一个函数),当函数完成执行时它将运行。例如。

$('#data').fadeOut(functionToRunWhenFadeOutIsComplete); 

//如果您定义了'functionToRunWhenFadeOutIsComplete',它将在fadeOut结束后运行。

有了这些知识,你现在可以解决你的问题。

var fadeInData = function fadeInData() { $('#data').fadeIn(); } 
var loadData = function loadData() { $('#data').load('url', fadeInData); } 
$('#data').fadeOut(loadData); 

或者,您可以将loadData,fadeInData定义为内联匿名函数。

相关问题