PHP Ajax 异步分页

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laoyaotask/article/details/76796779

在具体开发工作中,分页是一种非常常见功能模块。目前已经有不少基于jquery的分页插件,但是他们通常都是一次性获取所有记录加载到本地内存中,当数据量特别大时,显然效率较低。为了解决这个问题,实现了基于jquery ajax的异步分页。具体过程如下:
1、html

<script src="js/jquery-3.1.1.min.js" type="text/javascript" charset="utf-8"></script>
<!--用于显示数据内容-->
<ul id="showData"></ul>
<!--用于显示分页按钮--> 
<div id="pager"></div>
<!--用于显示当前页码等基本信息-->
<div id="detail"></div>

2、js

<script type="text/javascript">
    $(function  () {
        var pageSize=5;
        var totalPages,curPage,totalRs;
        function showPager(curPage,totalPages,pageSize,totalRs)
        {
            //如果只有一页
            if(totalPages==1)
            {
                $("#pager").html("1");
            }
            //如果是第一页
            else if(curPage==1)
            {
                $("#pager").html("<a href='#' onclick=getData("+(curPage+1)+")>下一页</a>  <a href='#' onclick='getData("+totalPages+")'>末页</a>");
            }
            //如果是最后一页
            else if(curPage==totalPages)
            {
                $("#pager").html("<a href='#' onclick='getData(1)'>首页</a>  <a href='#' onclick='getData("+(curPage-1)+")'>上一页</a>");
            }
            //其他情况
            else
            {
                $("#pager").html("<a href='#' onclick='getData(1)'>首页</a>  <a href='#' onclick='getData("+(curPage-1)+")'>上一页</a>"+"<a href='#' onclick='getData("+(curPage+1)+")'>下一页</a>  <a href='#' onclick='getData("+totalPages+")'>末页</a>");

            }

        }

        //下面这个函数必须这样定义,否则会报错
        getData=function(page)
        {
            curPage=page;
            $("#detail").text("正在获取。。。")

            $.getJSON("pager.php",{curPage:curPage,pageSize:pageSize},function (rs) {
                var temp="";
                for(each in rs.data)
                {
                    temp+="<li>"+rs.data[each]['title']+"</li>";
                }
                $("#showData").html(temp);
                showPager(curPage,rs.totalPages,pageSize,rs.totalRs);
                $("#detail").text("当前是第"+curPage+"页,一共有"+rs.totalRs+"条记录,分为"+rs.totalPages+"页。")
            })
        }

        //默认先加载第1页
        getData(1)
    })
</script>

3.php

<?php
    $dbh=new PDO("mysql:host=localhost;dbname=test","root","root");
    $dbh->query("set names utf8");
    $curPage=$_GET['curPage'];
    $pageSize=$_GET['pageSize'];

    $sql1="select title from news limit ".($curPage-1)*$pageSize.", ".$pageSize;
    $sql2="select count(nid) from news";
    $rs1=$dbh->query($sql1)->fetchAll();
    $rs2=$dbh->query($sql2)->fetchAll();

    echo(json_encode(array("data"=>$rs1,"totalPages"=>ceil($rs2[0][0]/$pageSize),"totalRs"=>$rs2[0][0])));
?>

4、结果截图
这里写图片描述
默认,第一页

这里写图片描述
第二页

第三页
第三页

猜你喜欢

转载自blog.csdn.net/laoyaotask/article/details/76796779