2012-05-30 68 views
1

我写了一个简单的脚本,其中我使用ajax $ .get来获取无限滚动的数据。问题是,我可能滚动比加载速度快,导致它加载三次?实现无限滚动而不显示重复数据

function last_msg_funtion() 
{ 
    var ID=$(".feed_container").last().attr("id"); 
    $.ajax({ 
     url: "ajax/pagination.php", 
     type:"get", 
     data: "p="+ID 
    }).done(function(data){ 
    if (data != "") 
     { 
      var $boxes = $(data); 
      //$(".feed_container:last").after(data); 
      $("#feed_main").append($boxes).masonry('appended',$boxes); 

     } 
}); 

$(window).scroll(function(){ 
    var mostOfTheWayDown = ($(document).height() - $(window).height()) - 300; 
    if ($(window).scrollTop() >= mostOfTheWayDown) 
    { 
     //alert('test'); 
     last_msg_funtion(); 
    } 
} 

如果我一直向下滚动,则需要一段时间才能加载。我在last_msg_function()中返回的数据是AJAX $ .get(),我正在获取图像。但是,它加载了相同数据的三倍。任何想法来防止这种情况?

感谢

回答

0

当G +工作,滚动到页面底部,G +拥有获取消息之前有点延迟。
使用setInterval()它将解决您的问题。里面的间隔函数调用last_msg_funtion()

+0

setInterval()不适用于我。我发现它会重复三次....不是两次或四次,但它会一直重复三次? – hellomello

1

你需要设置一个“搜索”变量,当空闲时为false,当搜索时为真,然后用它来知道何时开始一个新的搜索。

var searching = false; // new variable 

function last_msg_funtion() 
{ 
    if (!searching) { // only initiate a new ajax request if this variable is false 
     searching = true; // set variable to true 
     var ID=$(".feed_container").last().attr("id"); 
     $.ajax({ 
      url: "ajax/pagination.php", 
      type:"get", 
      data: "p="+ID 
     }).done(function(data){ 
      searching = false; // set variable to false on success 
      if (data != "") 
      { 
       var $boxes = $(data); 
       //$(".feed_container:last").after(data); 
       $("#feed_main").append($boxes).masonry('appended',$boxes); 

      } 
     }); 
    } 
}