2011-05-27 48 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