对于我来说,现在可能已经太晚了,无法在这里看到一个明确的解决方案,但我想我会从任何有意见的人那里得到一些想法......
我正在工作的网站有一长串用户帖子。当您到达或接近底部时,我已经让所有滚动事件处理程序在下一批 100 篇文章中使用 ajax。
我的问题是...我该如何防止出现以下情况?
- UserX 访问网站并加载帖子 1-100
- 另外 10 位用户访问了网站并添加了 10 篇帖子
- UserX 滚动到底部并加载帖子 101-200,这曾经是帖子 91-190
- UserX 以页面上 91-100 的重复帖子结束
我将在下面包含我的代码的精简版本,以防它帮助其他人
$.ajax({
type:'POST',
url:"/userposts.php",
data:{ limit: postCount },
success:function(data) {
$("postsContainer").append(data);
if ( $("postsContainer").find("div[id='lastPostReached']") ) {
// unbind infinite scrolling event handlers
}
},
dataType:'html'
});
在我的 PHP 脚本中,我基本上具有以下内容:
if ( ! isset($_POST["limit"]) ) {
$sql .= " LIMIT 101"; // initial request
} else {
$sql .= " LIMIT {$_POST["limit"]},101
}
$posts = mysql_query($sql);
while( $post = mysql_fetch_assoc($posts) ) {
/* output formatted posts */
}
// inform callback handler to disable infinite scrolling
if ( mysql_num_rows($posts) < 101 ) {
echo '<div id="lastPostReached"></div>';
}
这给了我无限滚动的好处和容易,但是当在 ajax 请求之间向表中添加新记录时,我如何防止出现假设的重复项?
最佳答案
您从 php 定义一个时间戳,指示页面加载时的服务器时间(例如 var _loadTime = <?php echo time(); ?>
),然后将此值作为 Ajax 数据配置对象的一部分与限制一起传递。
然后在服务器端,您可以排除在此之后创建的任何帖子,然后保留您的列表。
您还可以更进一步,将这段时间与基本的 ajax 长轮询技术一起使用,以通知用户自页面加载/上次加载新帖子以来的新帖子 - 类似于 Facebook 和 Twitter 的提要。
关于php - 防止重复无限滚动ajax加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8739489/