0

我的网站上有一个结果页面,我使用 AJAX 在向下滚动时返回更多结果,但是我的问题是,当它拉出结果时,它似乎多次拉出相同的结果?我不知道是什么原因造成的,任何人都可以看到我做错了什么吗?

AJAX

$(window).scroll(function () {
    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10)  {
         var number = $(".directory").children().length;
        $.ajax({
           type: "POST",
           url: "getentries.php",
           data: "count="+number,
           success: function(results){
             $('.directory').append(results);
           }
         });



    } else {}
});

PHP

$result = mysql_query("SELECT * FROM directory LIMIT {$_POST['count']},12");

$c = 1;
while($row = mysql_fetch_array($result))
  {
  echo '<div class="entry';
            if (($c % 4) == 1) echo ' alpha ';
            echo 'ALL THE DATA IS GOING HERE';      
            $c++;
  }
4

3 回答 3

3

问题很可能是在您滚动时触发了多个 ajax 调用。像这样设置一个定时事件监听器:

didScroll = false;
$(window).scroll(function() {
    didScroll = true;
});

setInterval(function() {
    if ( didScroll ) {
        didScroll = false;
        if(($(document).height() - $(window).height()) - $(window).scrollTop() < 100) {
            // load more results
        }
    }
}, 250);

这篇文章解释了为什么你的解决方案是一个坏主意:http ://ejohn.org/blog/learning-from-twitter/

于 2012-12-28T17:20:10.407 回答
1

所以问题是,一旦达到滚动阈值,您就会多次调用 ajax。您需要在第一个 ajax 调用上添加一个标志,以便在 ajax 调用完成之前不会再次调用它。

ajaxInProgress = false;
if (!ajaxInProgress && ($(window).scrollTop() >= $(document).height() - $(window).height() - 10)) {
    ajaxInProgress = true;
    $.ajax({
       type: "POST",
       url: "getentries.php",
       data: "count="+number,
       success: function(results){
         ajaxInProgress = false;
         $('.directory').append(results);
       }
     });
}
于 2012-12-28T17:17:02.543 回答
0

问题在于您如何通过 ajax 调用传递数据。从 Jquery 文档中,您需要将计数和金额放在数据中的 javascript 对象中:

$.ajax({
       type: "POST",
       url: "getentries.php",
       data: {count: number},
       success: function(results){
         $('.directory').append(results);
       }
     });

修复此问题后,您的 Mysql 查询应该将正确的下一条数据返回到您的视图中。

希望这可以帮助!

于 2012-12-28T17:07:17.903 回答