PHP动态滚屏无刷新加载数据

  滚屏加载,也称为滚动加载或懒加载,是一种网页设计技术,当用户滚动页面时,新内容会自动加载,无需点击“下一页”按钮。这种技术提高了用户体验,尤其是在处理大量数据时,如社交媒体、新闻网站和电子商务平台。

  滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PHP程序,返回相应的数据,并将返回的数据追加到页面底部,从而实现了动态加载,其实就是一个典型的Ajax应用。本文将使用jQuery,结合PHP,mysql以及JSON,为您讲解如何应用滚屏加载技术到您的项目中去。当然,阅读本文的前提是您需要有jQuery和PHP相关基础。

  index.php

  我们默认要显示15条数据,因此,我们先从数据库取开始的15条数据显示在页面。后面新加载的数据,我们也按每次15条的方式展示。

  为了讲解尽量简单,我使用原生的PHP和mysql查询语句。首先,需要连接数据库,包含连接信息的connnect.php。这里我定义了几个用户id。

  然后查询数据表,获得结果集,并循环输出,代码如下:

<?php 

require_once('connect.php'); 

$user = array('demo1','demo2','demo3','demo3','demo4'); 

?> 

<div id="container"> 

    <?php 

    $query=mysql_query("select * from say order by id desc limit 0,15"); 

    while ($row=mysql_fetch_array($query)) { 

    ?> 

    <div class="single_item"> 

        <div class="element_head"> 

              <div class="date"><?php echo date('m-d H:i',$row['addtime']);?></div> 

              <div class="author"><?php echo $user[$row['userid']];?></div> 

         </div> 

         <div class="content"><?php echo $row['content'];?></div> 

    </div> 

    <?php } ?> 

 </div>  

<div class="nodata"></div> 

  jQuery

  1、首先,我们要获取浏览器可视区域页面的高度:

var winH = $(window).height(); 

  2、然后,当滚动页面的时候需要做的事情是:计算页面总高度(当滚动底部时,页面新加载数据,所以页面总高度是动态变化的),计算滚动条位置(滚动条位置也是随着加载页面的高度动态变化的),然后构造一个公式,计算相对比例。

$(window).scroll(function () { 

    var pageH = $(document.body).height(); //页面总高度 

    var scrollT = $(window).scrollTop(); //滚动条top 

    var aa = (pageH-winH-scrollT)/winH; 

}); 

  3、当滚动条接近页底时,触发ajax加载,在本例中我们使用jQuery的getJSON方法,向服务端result.php发送请求,请求的参数为page,即页数。

if(aa<0.02){ 

    $.getJSON("result.php",{page:i},function(json){ 

        ..... 

    }); 

 } 

  4、如果请求响应成功返回JSON数据,则解析JSON数据,并将数据追加到页面DIV#container后,如果没有JSON数据返回,则说明数据全部显示完毕。

if(json){ 

    var str = ""; 

    $.each(json,function(index,array){ //遍历 

        var str = "..."; //获取的JSON数据 

        $("#container").append(str); //追加 

    }); 

    i++;  //页数+1 

}else{ 

    $(".nodata").show().html("别滚动了,已经到底了。。。"); 

    return false; 

} 

  完整的jQuery代码如下:

$(function(){ 

    var winH = $(window).height(); //页面可视区域高度 

    var i = 1; //设置当前页数 

    $(window).scroll(function () { 

        var pageH = $(document.body).height(); 

        var scrollT = $(window).scrollTop(); //滚动条top 

        var aa = (pageH-winH-scrollT)/winH; 

        if(aa<0.02){ 

            $.getJSON("result.php",{page:i},function(json){ 

                if(json){ 

                    var str = ""; 

                    $.each(json,function(index,array){ 

                        var str = "<div class="single_item"><div class="element_head">"; 

                        var str += "<div class="date">"+array['date']+"</div>"; 

                        var str += "<div class="author">"+array['author']+"</div>"; 

                        var str += "</div><div class="content">"+array['content']+"</div></div>"; 

                        $("#container").append(str); 

                    }); 

                    i++; 

                }else{ 

                    $(".nodata").show().html("别滚动了,已经到底了。。。"); 

                    return false; 

                } 

            }); 

        } 

    }); 

}); 

  result.php

  当滚动到页面底部时,前端Ajax请求到result.php,该后台程序将根据请求的数据页数:page,查询数据表中对应的记录,并将记录集以json的格式输出返回给前端处理。

require_once('connect.php'); //连接数据库 

$user = array('demo1','demo2','demo3','demo3','demo4'); 

$page = intval($_GET['page']);  //获取请求的页数 

$start = $page*15; 

$query=mysql_query("select * from say order by id desc limit $start,15"); 

while ($row=mysql_fetch_array($query)) { 

    $arr[] = array( 

        'content'=>$row['content'], 

        'author'=>$user[$row['userid']], 

        'date'=>date('m-d H:i',$row['addtime']) 

    ); 

} 

echo json_encode($arr);  //转换为json数据输出 

本站原创内容,转载请注明来源:https://www.liutonghui.com/30

困兽犹斗
上一篇 2013-10-16
一个迷你版Smarty模板引擎,认识模板引擎原理(附代码)
下一篇 2013-11-19

评论列表(0条)

  • 暂无评论

发表评论

captcha

相关推荐

  • PHP使用内置函数处理JSON数据

      JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在前端和后端之间传递数据。在PHP中,你可以使用内置的函数来处理JSON数据,实现数据的编码和解码。   以下是PHP中JSON的一些常见应用:   1. 编码(PHP对象转为JSON字符串)   使用 json_encode() 函数可以将PHP对象转换为JSON格式的字符串: $data = array( 'name' =......

    2013-10-09
    16780
  • jQuery Ajax无刷新数据增删改查功能

      一套简单的无刷新数据增删改查功能,基于jQuery Ajax异步请求技术,后端使用PHP处理数据并返回结果给前端,实现页面无刷新,不跳转对数据增删改查操作。   index.html &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;AJAX 无刷新增删改查&lt;/t......

    2014-11-16
    20100
  • PHP利用正则表达式提取内容中图片的函数

      用PHP开发产品中经常需要从某部分内容中提取出图片,比如在一个表单中,我们需要从内容中提取出图片的路径当作缩略图,这时就可以用正则表达式的规则匹配的方法来提取出图片路径,利用下面这个函数来完成。 &lt;?php function getImgs($content,$order='ALL'){ $pattern="//"; preg_match_all($pattern,$content,$match); ......

    2015-01-07
    23810
  • jQuery Ajax无刷新批量删除数据功能

      在 jQuery 中使用 Ajax 实现批量删除的基本思路,使用 jQuery 监听&ldquo;批量删除&rdquo;按钮的点击事件,收集用户选择的要删除的项目的标识(例如,ID)。   使用 Ajax 发送异步请求到后端,将要删除的项目标识传递给服务器。在后端,接收到请求后,根据接收到的项目标识进行删除操作,并返回相应的结果给前端。   以下是一个简单的示例代码:   index.html &lt;!DOCTYPE html&g......

    2015-06-15
    21330
  • Ajax实现无刷新表格实时编辑

      简单的jQuery Ajax表格实时编辑功能,点击单元格数据即可实时编辑更新数据,无需刷新跳转页面。   index.html &lt;!DOCTYPE html&gt; &lt;html lang="utf-8"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Ajax 表格实时编辑&lt;/title&gt; &lt;script src="ht......

    2016-02-20
    12260
  • Layui + jQuery无刷新增删改查功能

      使用Layui框架可以让后台管理功能开发更高效,UI风格更统一美观。简单介绍一下Layui+jQuery开发无刷新数据操作功能的原理,支持数据查询,增加,修改,删除(包括批量删除)。   index.html &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Layui......

    2018-09-14
    19930
  • PHP防止短时间内刷阅读量的方法

      防止短时间内刷阅读量是一个常见的需求,通常需要使用一些技术手段来检测和限制恶意访问。以下是一些可能的方法:   使用 Cookie 或 Session:   通过在用户访问时设置一个 Cookie 或 Session 记录,记录用户最后一次访问的时间戳。在下一次访问时,可以检查当前时间与上次访问的时间戳之间的差异,如果差异太小,则可能是刷阅读量的行为。 session_start(); $currentTime = time();......

    2021-05-06
    17930
  • ThinkPHP多入口文件多应用设置方法

      在使用ThinkPHP做项目开发时,为了让架构更清晰科学,提高安全和性能,方便维护,需要将多应用分配到各自对应的不同的入口文件上,而不是整个项目用一个入口文件。   此方法适用于ThinkPHP6/8,这是ThinkPHP默认的单应用结构: ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目......

    2024-03-31
    8280