只需使用一个变量来标记是否存在未完成的 ajax 请求。如果是这样,请不要再提出请求。否则获取数据。我的想法是,让用户滚动,为什么要阻止 UI。在这种情况下,就像进行同步调用一样。
var isLoading = false;
//event handler
$(window).scroll(function () {
// check height..
// make an ajax request if isLoading is false
if (!isLoading) {
$.ajax(/* .. */, success: function () {
isLoading = false;
},
error: function () {
isLoading = false;
});
isLoading = true;
}
}
如果您仍然想在 ajax 响应之前停止侦听事件,只需删除绑定并将其重新附加到 ajax 响应处理程序中。
var isLoading = false;
addScrollEvent();
function scrollHandler(e) {
// check height..
// make an ajax request if isLoading is false
if (!isLoading) {
$.ajax(/* .. */, success: function () {
isLoading = false;
addScrollEvent();
},
error: function () {
isLoading = false;
addScrollEvent();
});
$(window).off('scroll', scrollHandler);
}
}
function addScrollEvent() {
$(window).on('scroll', scrollHandler);
}