对我来说,在这里看到一个明确的解决方案可能为时已晚,但我想我会从任何有意见的人那里得到一些想法......
我正在处理的网站有很长的用户帖子列表。当你到达或接近底部时,我已经让所有滚动事件处理程序在下一批 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 请求之间将新记录添加到表中时出现的假设重复?