淡出,通过AJAX更新,使用Prototype淡入div

时间:2011-01-10 17:18:34

标签: javascript ajax scriptaculous prototypejs

我有一个div,其内容我想通过AJAX更新。为了使转换顺利进行,我想淡出旧内容,然后用AJAX响应更新它,然后将其淡入。

我的第一次尝试如下;但是当然AJAX可以在fade()调用之前完成,导致appear()无法正常触发并且终止状态逐渐淡出。我怎样才能按照自己的意愿做这项工作?

target = $('card_text_' + index);
new Ajax.Request('/games/card_text', 
         {asynchronous:false, 
          evalScripts:true, 
          method:'get', 
          parameters:'type=' + value,
          onCreate: function(){target.fade()},
          onSuccess: function(e){target.update(e.responseText).appear()}
          });

编辑:为了完整起见,我使用Prototype with script.aculo.us

3 个答案:

答案 0 :(得分:2)

我找到了我想要的解决方案,尽管文档并不容易。事实证明,所有script.aculo.us效果都有set of callbacks,包括afterFinish。我的代码变成了:

target = $('card_text_' + index);
new Effect.Fade(target, {afterFinish: function(){
  new Ajax.Updater(target, '/games/card_text', 
           {asynchronous:false, 
            evalScripts:true, 
            method:'get', 
            parameters:'type=' + value,           
            onSuccess: function(e){new Effect.Appear(target)}
            });

答案 1 :(得分:0)

到目前为止,大多数无法维护的解决方案是使用计时器和标志进行处理,以查看淡入淡出和请求是否已完成。

更新和淡出后,可以通过函数调用更改定时器。

在这两种情况下,它往往会陷入混乱。

答案 2 :(得分:0)

我认为更好的方法是首先进行AJAX调用。然后,当它完成后,淡出div。淡入淡出完成后,更换内容并将其淡入淡出。