2012-03-02 78 views
3

我有以下代碼,用戶在滾動到頁面底部時加載內容。問題是,如果一個人滾動太快,它會加載內容。我可以通過哪些方式更改我的代碼以防止此問題?從雙重加載內容停止.ajax

$(window).scroll(function(){ 
    if($(window).scrollTop() == $(document).height() - $(window).height()){ 
     $('div#ajaxResults').show(); 
     $.ajax({ 
      url: "ajax/home.php?last_id=" + $(".postitem:last").attr("id"), 
      success: function(html){ 
       if(html){ 
        $("#messages").append(html); 
        $('#ajaxResults').hide(); 
       }else{ 
        $('#ajaxResults').html('<center>None.</center>'); 
       } 
      } 
     }); 
    } 
}); 

我需要解決方案多次工作。該腳本加載了接下來的5條消息,但可能會加載數百條消息。它應該以與Facebook或Twitter加載更新相同的方式工作。

+0

將超過兩倍...滾動事件觸發100秒的時間,你需要一個緩存機制 – charlietfl 2012-03-02 04:04:09

回答

1

SOLUTION:

$(window).scroll(function(){ 
    if($(window).scrollTop() == $(document).height() - $(window).height()){ 
     var lastid = $(".postitem:last").attr("id"); 
     $('div#ajaxResults').show(); 
     $.ajax({ 
      url: "ajax/home.php?last_id=" + $(".postitem:last").attr("id"), 
      success: function(html){ 
       if(html){ 
        if(lastid == $(".postitem:last").attr("id")){ 
        $("#messages").append(html); 
        $('#ajaxResults').hide(); 
          } 
       }else{ 
        $('#ajaxResults').html('<center>None.</center>'); 
       } 
      } 
     }); 
    } 
}); 

添加加載AJAX之前檢查lastid一個變量,那麼只有追加的HTML,如果變量==最後一個ID文件。這樣,如果ajax已經加載,兩者不會相同,更新將不會發布。

+0

爲我工作,謝謝。真棒找到你正在尋找的問題。 ;) – tyler 2016-10-25 18:32:36

0

嘗試在if塊內添加$(this).unbind('scroll');,假定您不希望ajax請求運行多次。不要將它放在$.ajaxsuccess回調中,因爲它可能以這種方式觸發多於1個的ajax請求。

http://api.jquery.com/unbind/

0

你可以設置保存它被稱爲時間戳的變量,如果它是一個幾毫秒之內,則不會再打電話?一種黑客,但可能會伎倆。 顯然這並不是真的解決了問題,因爲這似乎與滾動事件被觸發的方式有關。