如何避免无限滚动中的多个JavaScript函数调用

如何避免无限滚动中的多个JavaScript函数调用,javascript,jquery,ajax,jsp,jquery-events,Javascript,Jquery,Ajax,Jsp,Jquery Events,我正在使用这个JavaScript函数创建一个具有无限滚动特性的JSP页面 <script language="javascript" type="text/javascript"> var count = 0; window.onload = loadSubPage; $(window).scroll(function(){ if ($(window).scrollTop() == $(document).height() -

我正在使用这个JavaScript函数创建一个具有无限滚动特性的JSP页面

<script language="javascript" type="text/javascript">

var count = 0;

window.onload = loadSubPage;

$(window).scroll(function(){
    if  ($(window).scrollTop() == $(document).height() - $(window).height()){
    alert("load appLeadershipSubView function calling");
        loadSubPage();
    }
});

function loadSubPage()
{
    alert("load appLeadershipSubView called");
        $.ajax({
        cache: false,
        url: 'appLeadershipSubView.do?count=' + count,
        async : true,
        beforeSend: function(){
        },
        success: function(html){
            alert("success event");
            $('#mainDiv').append(html);
            count++;
        },
        complete: function(){
        }
    }
    );
} 

</script> 

var计数=0;
window.onload=加载子页面;
$(窗口)。滚动(函数(){
if($(窗口).scrollTop()==$(文档).height()-$(窗口).height()){
警报(“加载appLeadershipSubView函数调用”);
加载子页面();
}
});
函数装入子页面()
{
警报(“加载appLeadershipSubView调用”);
$.ajax({
cache:false,
url:'appLeadershipSubView.do?count='+count,
async:true,
beforeSend:function(){
},
成功:函数(html){
警报(“成功事件”);
$('#mainDiv').append(html);
计数++;
},
完成:函数(){
}
}
);
} 

如你所见 我正在调用
loadSubPage
函数,将
appLeadershipSubView
页面中的html内容附加到
#mainDiv
中。 在页面加载事件中也会调用
loadSubPage

问题是当我向下滚动时,它会多次(2次有时3次)调用
loadSubPage
函数,并将重复数据追加到div中

因为我不熟悉JSP和Javascript,所以我无法解决这里的问题。
您能指出这里的问题吗?

添加一个布尔值以确保没有活动请求。在发出请求之前,请检查它是否处于活动状态

var isActive = false;
$(window).scroll(function(){
    if  (!isActive && $(window).scrollTop() == $(document).height() - $(window).height()){
    isActive = true;
在回调中,将isActive设置为false

success: function(html){
    $('#mainDiv').append(html);
    isActive = false;
我宁愿用这个函数


更干净、更不黑客,你将专注于应用程序的逻辑,而不是执行一些回调布尔重置魔术。

。。。并在回调中重置该布尔值。当单个变量起作用时,为什么要包含另一个库?@Amberlamps,因为它更干净(如更易于读取),因为当库中的代码经过良好测试时,你可以在代码中添加一些东西,因为库可以为你节省大量代码,而且它没有任何黑客属性。我刚刚查看了下划线的源代码,它们使用了一个控制变量
来限制它们自己。@Amberlamps隐藏在下划线的名称空间中,从而减少了代码中的bug。这只是一个如何实现解决方案的问题。这段代码出现了另一个问题。(我不确定是否要作为一个单独的问题发布)这个函数调用在FireFox上运行完全正常,但在Chrome上不起作用。它只调用函数一次,不再调用。我没有收到任何对话框询问是否“停止生成更多的消息框”,你们也能帮我吗?:)你绝对应该把这个问题作为一个新问题发布。还包括代码的相关部分。建议Pumbaa80:)