我的网站上有一页结果,我在使用AJAX向下滚动时返回更多reslts,但我的问题是因为它拉结果,它似乎多次拉同样的?我不知道是什么导致这种情况,任何人都可以看到我做错了什么?
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++;
}
答案 0 :(得分: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/
答案 1 :(得分: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);
}
});
}
答案 2 :(得分:0)
问题在于如何使用ajax调用传递数据。从Jquery文档中,您需要将数量和数量放在数据中的javascript对象中:
$.ajax({
type: "POST",
url: "getentries.php",
data: {count: number},
success: function(results){
$('.directory').append(results);
}
});
解决此问题后,您的Mysql查询应该将正确的下一条数据返回给您的视图。
希望这有帮助!