提问人:Snake-hh 提问时间:11/12/2023 最后编辑:OlivierSnake-hh 更新时间:11/12/2023 访问量:37
$(window).scroll(function() 加载多次
$(window).scroll(function() loads many times
问:
我正在使用滚动功能,问题是它加载了很多次,并且它不等待数据库提供的新信息。
这是代码!
$(document).ready(function(){
$(window).scroll(function(){
var lastID = $('.load-more').attr('lastID');
if(($('#postList').height() <= $(window).scrollTop() + $(window).height())&& (lastID != 0)){
$.ajax({
type:'POST',
url:'getData.php',
data:'id='+lastID,
beforeSend:function(){
$('.load-more').show(); },
success:function(html){
$('.load-more').remove();
$('#postList').append(html);
}
});
}
});
});
我希望你能帮助我,谢谢!
答:
0赞
volkerschulz
11/12/2023
#1
如果只是想防止一个 AJAX 请求在另一个请求运行时启动,请使用一个变量从 scroll 函数返回。在 AJAX 请求之前将其设置为 true,并在处理程序中将其重置为 false:always
var loading = false;
$(document).ready(function(){
$(window).scroll(function(){
if(loading)
return;
var lastID = $('.load-more').attr('lastID');
if(($('#postList').height() <= $(window).scrollTop() + $(window).height())&& (lastID != 0)){
loading = true;
$.ajax({
type:'POST',
url:'getData.php',
data:'id='+lastID,
beforeSend:function(){
$('.load-more').show();
},
success:function(html){
$('.load-more').remove();
$('#postList').append(html);
},
always: function() {
loading = false;
}
});
}
});
});
(未经测试)
正如@ProfessorAbronsius在评论中建议的那样:也可以看看 Intersection Observer API。似乎是一种更稳定的方法。
评论
0赞
Snake-hh
11/12/2023
哇,它可以工作,但只是一次,它应该加载更多次:(
0赞
volkerschulz
11/12/2023
这可能是你的 if 语句阻止了它加载更多次,因为变量是在请求完成后设置的。设置断点并检查第二次失败的位置。我无法使用您提供的信息在本地对其进行测试。loading
0赞
Snake-hh
11/12/2023
你是对的,我也必须在getData.php上做...谢谢!它现在可以工作了...... :)<3
评论