2011-05-27 41 views
0

我遇到了jQuery ajax和动画的一个小问题。 我有调用我的网页,并加载时,提供了一个小动画与jQuery easingjQuery:offset()动画和ajax

菜单布局这里是我的ajax.js

$(document).ready(function() { 

    // Ajax request 
    $(".transition").click(function() { 
     page = ($(this).attr("id")); 
     $.ajax({ 
     type: "GET", 
     url: page, 
     data: "ajax=true", 
     cache: false, 
     success: function(html) { 
      afficher(html); 
     }, 
     error: function(XMLHttpRequest,textStatus,errorThrows) { 
      // Erreur durant la requête 
     } 
     }); 
    }); 

    function afficher(donnees) { 
     $(".step").empty(); 
     $(".step").append(donnees); 

     // Animate 
     var step_position = $(".step").offset(); 
     $(".step").offset({ top: step_position.top, left: step_position.left - 1000 }); 
     $(".step").animate({ 
      "left": '+=1000', 
     }, 750, 'easeOutBack'); 
    } 
}); 

如果用户点击,一切工作的伟大。

但如果:在同一链路

  • 用户点击快速上

    • 用户双击在几个环节

    然后加载的数据超出页面。

    我知道我使用异步数据的事实存在问题,并且我在精确的时间要求offset。我试图把常量作为参数(而不是做var step_position = $(".step").offset();),但没有奏效。

    无论做多少个Ajax调用,我应该如何正确显示数据?

  • 回答

    1

    Moi aussi!

    是的有同样的问题 - 这就是所谓的竞争条件。我有一个按钮 - 我不知道你是否在使用它?

    我所做的是在点击处理程序中,我所做的第一件事是使用JQUERY .attr()函数禁用该按钮 - 添加disable属性。

    这有防止第二次点击做任何事情的效果。当ajax返回结果时,我重新启用了按钮。在这种情况下,你必须在动画之后的某个地方使用回调来重新启用按钮。

    +0

    是的,我试过了,但用户必须等待页面加载才能点击其他任何内容。如果他错了,他必须等待:这就是我想要避免的。 – Lucas 2011-05-27 14:43:55

    +0

    我最终做了非常相似的事情。我定义了一个全局变量,用于检查ajax调用是否仍在处理中。不解决我的“流体导航”问题(请参阅我以前的评论),但这样做。无论如何,如果没有人带来不同的东西,我会在几天内接受你的回答。谢谢 ! – Lucas 2011-05-27 16:42:01

    +0

    如果您不希望用户等待太久,可以为JQUERY ajax调用设置超时,并且最好在服务器上稍微缩短超时。 – T9b 2011-05-30 10:17:58