jQuery帖子 - 为什么有重复的请求?

时间:2013-01-12 02:32:51

标签: jquery ajax

我有这段代码:

$(window).scroll(function () { 

    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {

        var site_url = $("#site_url").val();
        var post_url = site_url+"index.php/ajax/get_more_users";
        $("#loading_more_users").show();
        var users_page = $("#users_page").val();


        //alert("y");
        $.post(post_url, {'page': users_page}, function(data){              
                //alert("x");
            $("#loading_more_users").hide();
            $("#left_members_collumn").append(data);
            $("#users_page").val(eval(Number(users_page)+1));


        });

   }
});

当我滚动到底部时,任何人都可以告诉我为什么$ .post会被执行一次,两次或三次?我得到了重复的内容。主函数执行正常,但我不知道为什么有多个ajax请求。

谢谢。

2 个答案:

答案 0 :(得分:3)

滚动多次触发符合if条件的条件。你可以做些什么来防止这种情况被设置为bool以表明你的帖子,所以你不要发布两次:

var isPosting = false;
$(window).scroll(function () { 

    if (!isPosting && $(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
        isPosting = true;
        var site_url = $("#site_url").val();
        var post_url = site_url+"index.php/ajax/get_more_users";
        $("#loading_more_users").show();
        var users_page = $("#users_page").val();


        //alert("y");
        $.post(post_url, {'page': users_page}, function(data){              
                //alert("x");
            $("#loading_more_users").hide();
            $("#left_members_collumn").append(data);
            $("#users_page").val(eval(Number(users_page)+1));
            isPosting = false;

        });

   }
});

答案 1 :(得分:2)

每次滚动时,你都会执行ajax请求,因为你将这个函数绑定到$(window).scroll()函数。如果您的if返回true,那么您将执行ajax request

要逐出它,您可以使用jquery中的函数one

$(window).one('scroll', function () { 

    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {

        var site_url = $("#site_url").val();
        var post_url = site_url+"index.php/ajax/get_more_users";
        $("#loading_more_users").show();
        var users_page = $("#users_page").val();


        //alert("y");
        $.post(post_url, {'page': users_page}, function(data){              
            //alert("x");
            $("#loading_more_users").hide();
            $("#left_members_collumn").append(data);
            $("#users_page").val(eval(Number(users_page)+1));
        });
   }
});