这很可能是重复的,是的,我看过它们herehere。我的问题与第二个问题非常相似。

第二个链接建议要解决此问题,必须执行以下操作:

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;

      }
    })

09-28 02:35