编辑:不幸的是,答案和建议并没有完全解决这个问题。我可能不得不切换到“查看更多帖子”按钮,而不是使用滚动,因为我认为这是问题所在。尽管我在任何地方都找不到解决方案,但最终能找到解决方案会很棒。
我的解决方案是添加超时事件。可怕又肮脏。这个:
complete: function (data) {
setTimeout(function() {
$("#loading-posts").fadeOut("fast");
$isFetchingNotes = false;
}, 1000);
}
我为我的网站写了一个自定义博客。当用户滚动时,较旧的帖子会出现并通过 JQuery AJAX 自动加载。这是有效的 - 但是,它获取数据的次数似乎比我想要的多 2、3 或 4 次。事实上,我只希望它获取一次数据。所以我放了一个“正在运行”的类型变量,但这也不起作用,它仍然不止一次地获取数据并复制帖子。这是我的代码:
$(window).scroll(function(){
var $scroll = $(window).scrollTop();
var $docHeight = $(document).height();
var $winHeight = $(window).height();
var $lastPost = ($(".note-area:last").attr("id") - 1);
if($scroll === $docHeight - $winHeight) {
if(!$isFetchingNotes) {
var $isFetchingNotes = true;
$("div.more-posts").show();
$("#loading-posts-gif").fadeIn("slow");
$.ajax({
type: "GET",
url: 'loadnotes.php" ?>',
data: {
'lastPost': $lastPost
},
cache:true,
success: function(data) {
if(data) {
$('div#post-area').append(data);
$('div.more-posts').hide();
} else {
$('div.more-posts').replaceWith("<h4>-- End of notes --</h4>");
}
},
complete: function () {
$("#loading-posts").fadeOut("fast");
}
}).error(function (event, jqXHR, ajaxSettings, thrownError) {
$('div.more-posts').html("<h2>Could not retrieve data</h2>");
});
$isFetchingNotes = false;
} // End if $isfetchingnotes
} // End if scroll load point
}); // End onscroll event
尽管 $isFetchingNotes 变量设置为 true,但任何人都可以解释为什么它可能会尝试继续获取数据吗?谢谢!