2012-03-02 80 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

你可以设置保存它被称为时间戳的变量,如果它是一个几毫秒之内,则不会再打电话?一种黑客,但可能会伎俩。 显然这并不是真的解决了问题,因为这似乎与滚动事件被触发的方式有关。