Jquery 停止滚动绑定功能,直到AJAX请求成功
我正在jQuery中执行一个无限滚动脚本,如下所示:Jquery 停止滚动绑定功能,直到AJAX请求成功,jquery,asynchronous,semaphore,Jquery,Asynchronous,Semaphore,我正在jQuery中执行一个无限滚动脚本,如下所示: $(window).scroll(function(){ if($(window).scrollTop() >= $(document).height() - $(window).height() - 50){ // If we have not loaded all pages yet if($('#feed').data('pagesloaded') != 0){ var toload = $('#
$(window).scroll(function(){
if($(window).scrollTop() >= $(document).height() - $(window).height() - 50){
// If we have not loaded all pages yet
if($('#feed').data('pagesloaded') != 0){
var toload = $('#feed').data('pagesloaded') + 1;
$.post("/feed/" + toload, { 'ignore': showed_posts_id }, function(html){
if(html){
$('#feed')
.data('pagesloaded', toload)
.append(html);
}else{
// If all pages are loaded, disable infinite scrolling
$('#feed').data('pagesloaded', 0);
}
});
}
}
});
其中50
是从触发事件的底部开始的像素偏移量。但是,当滚动到页面底部时,当偏移量从50变为0时,会多次触发该函数,从而导致所有页面同时加载
我听说过将事件绑定到$(window).ajaxStart()和.ajaxStop()的技术,但由于在我的应用程序中使用了大量异步ajax,它会干扰无限滚动。这就是我要说的:
var ajaxRunning = false;
$(window).ajaxStart(function () {
ajaxRunning = true;
}).ajaxStop(function () {
ajaxRunning = false;
});
我曾考虑过使用一个简单的二进制信号量来检查$.post是否仍在运行,但我想知道这是否是一种不好的做法。最好的方法是什么?我终于在$(窗口)上添加了一个简单的数据标志。如果有人认为这是一种不好的练习,并且知道一种更有效的方法,我很乐意听到
$(window).scroll(function(){
if($('#feed').data('pagesloaded') != 0 && !$(window).data('infinite-scroll-async')){
if($(window).scrollTop() >= $(document).height() - $(window).height() - 50){
// Locks the function
$(window).data('infinite-scroll-async', true);
var toload = $('#feed').data('pagesloaded') + 1;
$.post("/feed/" + toload, { 'ignore': showed_posts_id }, function(html){
if(html){
$('#feed')
.data('pagesloaded', toload)
.append(html);
}else{
// If all pages are loaded, disable infinite scrolling
$('#feed').data('pagesloaded', 0);
}
}).complete(function(){
// Unlocks the function
$(window).data('infinite-scroll-async', false);
});
}
}
});