Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止重复无限滚动ajax加载程序_Php_Jquery_Mysql_Ajax_Infinite Scroll - Fatal编程技术网

Php 防止重复无限滚动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条帖子的副本 我将在下面提供我的代码的精简版本,以防对

这可能是太晚了,我在这里看到一个明确的解决方案,但我想我会从任何有意见的人那里得到一些想法

我工作的网站有一长串的用户帖子。在下一批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您能提供一个例子吗?