2016-11-26 2 views
1

ユーザーが下にスクロールすると、次の10のパブリケーションがすべてフィードにロードされます。問題は、このコードが複数のスクロール・トゥ・ボトム・ボトム・イベントを検出するため、ajaxが複数のリクエストを送信することです。ユーザーがさらに下にスクロールすることを考慮して、複数の代わりに1つのAjaxリクエストを作成する方法エンドレススクロールの実装で複数の代わりに1つのajaxリクエストを作成する方法

$(window).scroll(function() { 

    if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {   

     $.ajax({ 
      url: '/more/', 
      type:'GET', 
      dataType: 'json', 
      data:2, 
      success: function (data) { 
       alert(data);   
      } 
     }); 
    } 
}); 
+0

あなたは関数が一度だけ起動するようにしたいですか?または、一度一回、下にスクロールしますか?明らかに毎回 – user2085143

+0

@ user2085143 –

答えて

0

はAjaxが運転中であるかどうかを確認するために、ロックを使用してみてください、あなたがロックを解放することができた後、AJAXを介してデータを受信するまで次のAJAX呼び出しをしません。

var lock = false; 

$(window).scroll(function() { 

if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {   

if(lock==true){ 
return; 

} 

lock = true;   

$.ajax({ 
      url: '/more/', 
      type:'GET', 
      dataType: 'json', 
      data:2, 
      success: function (data) { 
       alert(data);        
      } 
     }).always(function() { 
      lock = false; 
     }); 
    } 
}); 
0

この

$(window).scroll(function() { 
    if($(window).scrollTop() + $(window).height() == $(document).height()) { 
     alert("bottom!"); 
    } 
}); 
0

これを試してみてください:

$(window).scroll(function() { 
 
    if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) { 
 
    var jqXHR = $(document).data("jqXHR"); 
 
    if(jqXHR) { 
 
     return; 
 
    } 
 
    jqXHR = $.ajax({ 
 
     url: '/more/', 
 
     type: 'GET', 
 
     dataType: 'json', 
 
     data: 2, 
 
     success: function(data) { 
 
     alert(data); 
 
     } 
 
    }); 
 
    $(document).data("jqXHR", jqXHR); 
 
    jqXHR.always(function(){ 
 
     $(document).removeData("jqXHR"); 
 
    }); 
 
    } 
 
});