分页查询是在日常生活中经常遇到的,例如博客分页、淘宝关键字分页查询等,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'>«</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'>»</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);