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

时间:2013-12-14 05:01:19

标签: javascript jquery ajax

这很可能是重复的,是的,我看过他们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

        }
    })

});

问题:如何停止当前脚本两次触发?这个脚本的结构好吗? [我觉得设计非常糟糕,导致这个问题的那个]

我可以详细说明。我尽力说出这个问题。

1 个答案:

答案 0 :(得分:1)

好像你回答了自己的问题!添加一个变量并检查它是否未定义,然后进行处理,如果已经设置,则不要做任何事情。

    $(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;

      }
    })