当用户滚动到底部时,Ajax函数会多次触发

Ajax function firing multiple times when user scrolls to bottom

本文关键字:函数 Ajax 滚动 用户 底部      更新时间:2023-09-26

这很可能是重复的,是的,我在这里和这里都看到过。我的问题与第二个问题相当相似。

第二个链接建议,要解决这个问题,必须做这样的事情:

function loadMoreResults() {
  if (flag) return;
  flag = true;
[...]
  flag = false;
}

我曾尝试在实际代码中安装这样的逻辑,但无论()和{}的打开和关闭是否正确,它都会出现语法错误。也许我做错了。

$(document).ready(
    function loadAll (param) {
        if (param < 0) {
            return;
        } else if (isNaN(param)) {
            param = param.responseText;
        } else if (!isNaN(param)) {
        }
        $.ajax({
            url: '../login/functionLogin/functions.php',
            type: 'POST',
            dataType: 'JSON',
            data: {task: "load", next_id: param},
            success: function(data) {
                next_id = data.next_id;
                $.each(results, function(i, attr) {
                     //Do whatever and return next_id
                    }       
                })
            }
        });
        //Since the next_id is within the function, I do not have to make it global.
        $(window).scroll(function () { //If user scrolls to bottom, fire anything inside
                if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
                    loadAll(next_id).die(); //Firing twice or even thrice
        }
    })
});

问题:如何才能阻止当前脚本启动两次?这个剧本的结构好吗[我强烈感觉它的设计非常糟糕,是造成这个问题的原因]

我可以详细说明。我尽量用我最好的措辞来回答这个问题。

似乎你回答了自己的问题!添加一个变量并检查它是否未定义,然后进行处理,如果已设置,则不执行任何操作。

    $(window).scroll(function () { //If user scrolls to bottom, fire anything inside
            if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
                if (typeof flag != 'undefined' && flag) return;
                loadAll(next_id); // .die(); // what is the die();  ??? //Firing twice or even thrice
                flag = true;
      }
    })