从双重加载内容停止.ajax
问题描述:
我有以下代码,用户在滚动到页面底部时加载内容。问题是,如果一个人滚动太快,它会加载内容。我可以通过哪些方式更改我的代码以防止此问题?从双重加载内容停止.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加载更新相同的方式工作。
答
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
答
尝试在if块内添加$(this).unbind('scroll');
,假定您不希望ajax请求运行多次。不要将它放在$.ajax
success
回调中,因为它可能以这种方式触发多于1个的ajax请求。
答
你可以设置保存它被称为时间戳的变量,如果它是一个几毫秒之内,则不会再打电话?一种黑客,但可能会伎俩。 显然这并不是真的解决了问题,因为这似乎与滚动事件被触发的方式有关。
将超过两倍...滚动事件触发100秒的时间,你需要一个缓存机制 – charlietfl 2012-03-02 04:04:09