2012-03-02 17 views
3

ユーザーがページの一番下までスクロールすると、コンテンツをロードする次のコードがあります。問題は、スクロール速度が速すぎると内容が2倍になるということです。これを防ぐために私のコードをどのように変更できますか?ダブルロードコンテンツを停止する.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

答えて

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>'); 
       } 
      } 
     }); 
    } 
}); 

はアヤックスがロードされる前にlastidをチェックする変数を追加し、その後、HTMLのみを追加する場合は、変数==文書の最後のid。この方法で、ajaxが既にロードされている場合、2つは等しくなく、更新はポストされません。

+0

私のために働いてくれて、ありがとう。あなたが探している質問を正確に見つけるのは素晴らしいです。 ;) – tyler

0

ajaxリクエストを複数回実行したくない場合は、$(this).unbind('scroll');をifブロックの内側に追加してみてください。この方法で1回以上のajaxリクエストを発生させる可能性があるので、$.ajaxsuccessコールバックに入れないでください。

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

0

は、あなたはそれが呼び出されたタイムスタンプを格納する変数を設定することができ、それは、数ミリ秒以内だ場合、再度呼び出すことはありませんか?ハック・アイッシュの種類ですが、そのトリックを行うかもしれません。 明らかに、スクロールイベントがどのようにトリガーされているかのように見えるので、これは実際に問題を解決するものではありません。

関連する問題