Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS JQuery window.scroll在Mozilla Firefox中触发多个请求_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript JS JQuery window.scroll在Mozilla Firefox中触发多个请求

Javascript JS JQuery window.scroll在Mozilla Firefox中触发多个请求,javascript,jquery,ajax,Javascript,Jquery,Ajax,我通过以下方式在我的网页上实现了内容的延迟加载: 初始荷载: func1:通过ajax调用获取10个品牌的信息(同时返回预期的总数据)。 func2:通过ajax获取上述功能中接收到的10个品牌的产品信息 if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){ if(totaldatarecvd < totalExpectedData){ func1:

我通过以下方式在我的网页上实现了内容的延迟加载:

初始荷载: func1:通过ajax调用获取10个品牌的信息(同时返回预期的总数据)。 func2:通过ajax获取上述功能中接收到的10个品牌的产品信息

if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){
       if(totaldatarecvd < totalExpectedData){
         func1: Get information for next 10 brands via ajax call.
        func2: Get products information of the 10 brands recieved in above function via ajax.
       }

      }
if($(窗口).scrollTop()>=($(文档).height()-$(窗口).height())*0.7){
if(totaldatarecvd
问题:在Google chrome上,它可以正常工作,而在Mozilla Firefox上,当用户滚动屏幕70%时,会发出多个ajax请求,因此呈现的数据顺序会中断。 预期:当70%的屏幕滚动时,发出一个ajax请求以获取下10个数据。在进一步的滚动中,获取接下来的10个品牌,以此类推


请建议如何通过一次一个请求来实现延迟加载。

我相信您正在经历这种行为,因为当您使用鼠标滚轮滚动页面时,您实际所做的是一次滚动页面X像素(例如,使用一个滚轮“滚动”20像素)。但是,每次向下滚动页面1个像素时,都会触发滚动事件。因此,理论上,每个滚轮“滚动”都应执行分配给滚动事件的任何功能20次

解决方案:添加一个(全局)变量,该变量将控制是否已达到所需的滚动位置(从而启动数据加载),并使用该变量防止多个数据加载请求。变量最初应设置为
false
,达到所需的滚动位置后,设置为
true
,并启动数据加载

数据加载完成后,不要忘记将其设置为
false
,否则它只会在第一次工作

dataLoading = false;

if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7 && !dataLoading){

    dataLoading = true;

    if(totaldatarecvd < totalExpectedData){
        func1: Get information for next 10 brands via ajax call.
        func2: Get products information of the 10 brands recieved in above function via ajax.
    }

}
dataload=false;
如果($(窗口).scrollTop()>=($(文档).height()-$(窗口).height())*0.7&&!数据加载){
数据加载=真;
if(totaldatarecvd