Php 防止重复无限滚动ajax加载程序
这可能是太晚了,我在这里看到一个明确的解决方案,但我想我会从任何有意见的人那里得到一些想法 我工作的网站有一长串的用户帖子。在下一批100篇文章中,当您到达或接近底部时,我已经将所有滚动事件处理程序都用于ajax 我的问题是。。。如何防止出现以下情况?Php 防止重复无限滚动ajax加载程序,php,jquery,mysql,ajax,infinite-scroll,Php,Jquery,Mysql,Ajax,Infinite Scroll,这可能是太晚了,我在这里看到一个明确的解决方案,但我想我会从任何有意见的人那里得到一些想法 我工作的网站有一长串的用户帖子。在下一批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>';
}
if(!isset($\u POST[“limit”])){
$sql.=“限制101”;//初始请求
}否则{
$sql.=“LIMIT{$\u POST[“LIMIT”]},101
}
$posts=mysql\u查询($sql);
而($post=mysql\u fetch\u assoc($posts)){
/*输出格式化的帖子*/
}
//通知回调处理程序禁用无限滚动
if(mysql_num_行($posts)<101){
回声';
}
这使我可以轻松地无限滚动,但如何防止在ajax请求之间向表中添加新记录时出现假设的重复?只需为帖子使用唯一的标识符ID并向后计数即可 首次访问用户请求发布603-503 十个用户进入该页面并添加评论,因此最高评论现在是613 用户反驳并请求503-403
问题已解决?:)更新ajax请求,以便除了
limit
参数外,还可以通过当前的帖子id范围(我假设帖子具有某种唯一的id)。更新php以在检索下一组帖子时考虑这些参数
也就是说,请求不是说“再给我100”,而是“从id x开始给我100”
(很抱歉,我现在没有时间为此编写示例代码。)您可以从php定义一个时间戳,指示页面加载时的服务器时间(例如
var\u loadTime=
),然后将该值作为Ajax数据配置对象的一部分与限制一起传递
然后在服务器端,您可以排除在此之后创建的任何帖子,并保留您的列表
您还可以更进一步,使用这一次以及基本的ajax长轮询技术来通知用户自页面加载/上次加载新帖子以来的新帖子-类似于Facebook和Twitters提要。如果我总是按逆时间顺序排序,那就可以了,但我使用了几个过滤器来对帖子列表进行排序o帖子的主键将以随机顺序排列……我考虑在帖子数据中包含一个包含所有当前列出帖子的数组,以从未来的SQL查询中排除,(即:'不在(a,b,…,z)'),但该数组中最终可能包含100个ID,这似乎不符合从原始过滤器向后排序的实际情况(ASC=DESC,DESC=ASC)然后从数据集的末尾到前面剪切数据块。例如,您的第一个帖子数据块限制是(postnumbers-100到postnumbers)在这之后,它始终是您最后交付的索引—100到最后一个索引。这样,从逻辑上讲,所有新数据都会附加到数据集的末尾。如果有人删除了某些内容,该怎么办?在我看来,这是一种更稳健的方法(抵制添加和删除)。我想知道查询的一些实现。@nnnnnn您能提供一个例子吗?