用ajax作分页查询

分页查询是在日常生活中经常遇到的,例如博客分页、淘宝关键字分页查询等,ajax的分页相对复杂些,但是给用户的体验却是非常棒的,它可以实现不用刷新页面而进行分页。

我用的是minzu表:

首先,引入 jquery文件和bootstrap文件,因为要用bootstrap给分页做样式

<script src="jquery-3.2.0.min.js"></script>
<script src="dist/js/bootstrap.min.js"></script>
<link href="dist/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<style>
.list:hover{ cursor:pointer}//鼠标变小手
#prev:hover{ cursor:pointer}
#next:hover{ cursor:pointer}
</style>
<!-- HTML5 Shim 和 Respond.js 用于让 IE8 支持 HTML5元素和媒体查询 -->
      <!-- 注意: 如果通过 file://  引入 Respond.js 文件,则该文件无法起效果 -->
      <!--[if lt IE 9]>
         <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
         <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
      <![endif]-->
</head>

其次就是从数据库读数据显示表:

<body>
<h1>民族信息</h1>
<div>名称:<input type="text" id="name1" /> <input type="button" id="chaxun" value="查询" /></div>
<br />
<table class="table table-striped">
  <thead>
    <tr>
      <td>代号</td>
      <td>名称</td>
    </tr>
      <tbody id="shuju">
        
      </tbody>
   </thead>
</table><br />

<ul class="pagination" id="xinxi"><!--引用bootstrap显示分页信息-->
</ul>
</body>

然后开始写分页信息,理清思路,先干什么后干什么,先定义当前页与显示条数,造几个方法:

<script>
//定义当前页,默认为1,不能为0
var page = 1;
//定义每一页显示多少条留言信息
var num = 5;
//加载数据
Load();

//加载分页列表
LoadFenYe();

这里开始写分页方法:

//加载数据的方法
function Load()
{
    var name1 = $("#name1").val();
    $.ajax({
        url:"fenchuli.php",
        data:{page:page,num:num,name1:name1},
        type:"POST",
        dataType:"JSON",
        success: function(data){
            var str = "";
            for(var k in data)//json遍历方式
            {
                str = str + "<tr><td>"+data[k].code+"</td><td>"+data[k].name1+"</td></tr>";
            }
            $("#shuju").html(str);
        }
        
    })
}

//加载分页信息
function LoadFenYe()
{
    //存储所有分页信息的代码
    var s = "";
    var name1 = $("#name1").val();
    //加载上一页
    s = "<li><a id='prev'>&laquo;</a></li>";
    //加载列表
    var zts = 0;
    $.ajax({
        async:false,//必须取消异步,不然总条数为0,总页数也为0
        data:{name1:name1},
        type:"POST",
        url:"zts.php",
        dataType:"TEXT",
        success: function(data){
            zts = data;
        }

    });
    
    //求总页数,总页数为总条数除以每一页显示的条数,如果为小数则向上取整
    var zys = Math.ceil(zts/num);
    //为了防止出错
    page = parseInt(page);
    for( var i=page-2;i<page+3;i++)
    {
        if(i>0 && i<=zys)
        {
            if(i==page)
            {
                s = s+"<li class='active'><a ys='"+i+"' class='dangqian'>"+i+"</a></li>";
            }
            else
            {
                s = s+"<li><a ys='"+i+"' class='list'>"+i+"</a></li>";
            }
            
        }
    }
    //加载下一页
    s = s+"<li><a id='next'>&raquo;</a></li>";
    
    $("#xinxi").html(s);

添加事件:

//给上一页加事件
    $("#prev").click(function(){
        page = parseInt(page);
        if(page>1)
        {page--;}
        
        //重新加载数据
        Load();
        //重新加载分页信息
        LoadFenYe();
    })
    //给下一页加事件
    $("#next").click(function(){
        page = parseInt(page);
        if(page<zys)
        {page++;}
        
        //重新加载数据
        Load();
        //重新加载分页信息
        LoadFenYe();
    })
    
    //给列表加事件
    $(".list").click(function(){
        page = parseInt($(this).attr("ys"));
        //重新加载数据
        Load();
        //重新加载分页信息
        LoadFenYe();
    })
}

$("#chaxun").click(function(){
    //重新加载数据
    Load();
    //重新加载分页信息
    LoadFenYe();
})

</script>

fenchuli页面:

<?php
$page = $_POST["page"];
$num = $_POST["num"];
$name1 = $_POST["name1"];
require "DBDA.class.php";
$db = new DBDA();
$tguo = ($page-1)*$num;//跳过多少条数据

$sql = "select * from minzu where name1 like '%{$name1}%' limit {$tguo},{$num}";

echo $db->jsonquery($sql);

zts页面:

<?php
$name1 = $_POST["name1"];
require "DBDA.class.php";
$db = new DBDA();
$sql = "select count(*) from minzu where name1 like '%{$name1}%'";
echo $db->strquery($sql);

 

posted @ 2017-05-17 09:14  梦深深处  阅读(373)  评论(0编辑  收藏  举报