Javascript jQuery$。执行时冻结

Javascript jQuery$。执行时冻结,javascript,jquery,dom,Javascript,Jquery,Dom,我有以下执行“无限滚动”样式功能的脚本: var next_page_link = $('.wp-pagenavi a:eq(-2)').attr('href'); $(window).scroll(function() { if ($(window).scrollTop() > $(document).height() / 2) { $.get(next_page_link, function(data){

我有以下执行“无限滚动”样式功能的脚本:

    var next_page_link = $('.wp-pagenavi a:eq(-2)').attr('href'); 

    $(window).scroll(function() {
        if ($(window).scrollTop()  > $(document).height() / 2) {
            $.get(next_page_link, function(data){
                    if ($(data).find('.wp-pagenavi a:eq(-2)').attr('href') != next_page_link) {
                        next_page_link = $(data).find('.wp-pagenavi a:eq(-2)').attr('href');
                        var content = $(data).find('#multiple_product_top_container').html();
                        $('#multiple_product_top_container').append(content);
                    }
            });                 
        }
    });
我遇到的一个问题是,每次运行
$.get
函数时,浏览器都会冻结2-3秒或更长时间,只有在下一页完全加载后才能取消冻结

我的问题是,是否可以将
$.get
函数设置为异步运行,或者使用其他方法来消除冻结

顺便说一句,我知道使用服务器端脚本是可能的,但我遇到了很多冲突,涉及到更多的解析更复杂


感谢对评论中问题的回答:
我如何设置它,以便在旧请求完成之前新请求不会发生?

您可以使用:


添加一个条件是一个好主意,即当您已经检索到所有可以检索的内容时,不允许发出新请求。

对注释中问题的回答:
如何设置它,以便在旧请求完成之前不能发出新请求?

您可以使用:


添加一个条件是一个好主意,即当您已经检索到所有可以检索的内容时,不允许发出新请求。

对注释中问题的回答:
如何设置它,以便在旧请求完成之前不能发出新请求?

您可以使用:


添加一个条件是一个好主意,即当您已经检索到所有可以检索的内容时,不允许发出新请求。

对注释中问题的回答:
如何设置它,以便在旧请求完成之前不能发出新请求?

您可以使用:



最好添加一个条件,即当您已检索到所有可能检索的内容时,不进行新请求。

$。get是异步的,这一定是回调有问题。您对
$的调用是否已取消?或者一个不耐烦的人能一次又一次地触发它吗?@Paul'debounced'?我以前从未遇到过这种情况。你能解释一下它的作用吗?ThanksMetimes将代码包装在
setTimeout(fn,0)中帮助。它实际上在许多js库中使用。问题可能是所有的AJAX请求都在轰炸服务器,因为每个滚动都会创建一个新的请求(查看Chrome中的“网络”选项卡以了解我的意思)。添加一个条件,即在旧请求完成之前,新请求不能发生。$get是异步的,您的回调一定有问题。$您对
$的调用是否取消了?或者一个不耐烦的人能一次又一次地触发它吗?@Paul'debounced'?我以前从未遇到过这种情况。你能解释一下它的作用吗?ThanksMetimes将代码包装在
setTimeout(fn,0)中帮助。它实际上在许多js库中使用。问题可能是所有的AJAX请求都在轰炸服务器,因为每个滚动都会创建一个新的请求(查看Chrome中的“网络”选项卡以了解我的意思)。添加一个条件,即在旧请求完成之前,新请求不能发生。$get是异步的,您的回调一定有问题。$您对
$的调用是否取消了?或者一个不耐烦的人能一次又一次地触发它吗?@Paul'debounced'?我以前从未遇到过这种情况。你能解释一下它的作用吗?ThanksMetimes将代码包装在
setTimeout(fn,0)中帮助。它实际上在许多js库中使用。问题可能是所有的AJAX请求都在轰炸服务器,因为每个滚动都会创建一个新的请求(查看Chrome中的“网络”选项卡以了解我的意思)。添加一个条件,即在旧请求完成之前,新请求不能发生。$get是异步的,您的回调一定有问题。$您对
$的调用是否取消了?或者一个不耐烦的人能一次又一次地触发它吗?@Paul'debounced'?我以前从未遇到过这种情况。你能解释一下它的作用吗?ThanksMetimes将代码包装在
setTimeout(fn,0)中帮助。它实际上在许多js库中使用。问题可能是所有的AJAX请求都在轰炸服务器,因为每个滚动都会创建一个新的请求(查看Chrome中的“网络”选项卡以了解我的意思)。添加一个条件,新的请求在旧的请求完成之前不能发生。这是一个非常好的主意,非常好用!非常感谢这是一个非常好的主意,非常好用!非常感谢这是一个非常好的主意,非常好用!非常感谢这是一个非常好的主意,非常好用!非常感谢D
var semaphore = true;
var next_page_link = $('.wp-pagenavi a:eq(-2)').attr('href'); 

$(window).scroll(function() {
    if ($(window).scrollTop()  > $(document).height() / 2 && semaphore) {
        semaphore = false;
        $.get(next_page_link, function(data){
            semaphore = true;
                if ($(data).find('.wp-pagenavi a:eq(-2)').attr('href') != next_page_link) {
                    next_page_link = $(data).find('.wp-pagenavi a:eq(-2)').attr('href');
                    var content = $(data).find('#multiple_product_top_container').html();
                    $('#multiple_product_top_container').append(content);
                }
        });                 
    }
});