$(window).scroll(function() 加载多次

$(window).scroll(function() loads many times

提问人:Snake-hh 提问时间:11/12/2023 最后编辑:OlivierSnake-hh 更新时间:11/12/2023 访问量:37

问:

我正在使用滚动功能,问题是它加载了很多次,并且它不等待数据库提供的新信息。

这是代码!

$(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);
            }
        });
    }
});

});

我希望你能帮助我,谢谢!

JavaScript AJAX 滚动

评论

1赞 Professor Abronsius 11/12/2023
如果您的目标是在用户向下滚动页面时加载更多内容,您可能需要查看 Intersection Observer API?!
0赞 Adi 11/12/2023
这回答了你的问题吗?滚动事件触发次数过多。我只希望它最多每秒发射一次

答:

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