使用AJSX分頁原理:封裝兩個方法,一個方法負責顯示,一個負責寫入分頁欄。
首先使用一張數據比較多的數據庫中的表格:
主界面加載后首先導入所有數據,並顯示前20條數據,在訪問數據庫時,使用limit顯示前20條:
html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> <script src="jquery-1.11.2.min.js"></script> </head> <body> <div> <input type="text" id="key" /> <input type="button" value="查詢" id="chaxun" /> </div> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代號</td> <td>名稱</td> <td>父級代號</td> </tr> <tbody id="nr"> </tbody> </table> <div id="xinxi"> </div> </body> </html>
首先把表頭顯示出來,要導入jq包。
用AJAX從數據庫中用limit20條每頁的搜索顯示第一頁:
js代碼:
<script type="text/javascript"> var page = 1; //當前頁 Load(); //加載數據 function Load() { var key = $("#key").val(); //查詢條件 $.ajax({ url: "chuli.php", data: { page: page, key: key }, type: "POST", dataType: "JSON", success: function(data) { var str = ""; for(var k in data) { str += "<tr><td>" + data[k].AreaCode + "</td><td>" + data[k].AreaName + "</td><td>" + data[k].ParentAreaCode + "</td></tr>"; } $("#nr").html(str); } }); }
chuli.php文件:
<?php include("DBDA.class.php"); $db = new DBDA(); $page = $_POST["page"]; $key = $_POST["key"]; $num = 20; $tiao = ($page-1)*$num; $sql = "select * from chinastates where areaname like '%{$key}%' limit {$tiao},{$num}"; echo $db->JSONQuery($sql);
這里引入了一個php的類文件:
此類文件用來返回字符串,數據庫搜索結果,或者JSON數據:
DBDA.class.php
<?php class DBDA { public $host="localhost"; public $uid = "root"; public $pwd = ""; public $dbname = "12345"; //成員方法 public function Query($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { return $r->fetch_all(); } else { return $r; } } //返回字符串的方法 public function StrQuery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { $attr = $r->fetch_all(); $str = ""; foreach($attr as $v) { $str .= implode("^",$v)."|"; } return substr($str,0,strlen($str)-1); } else { return $r; } } //返回JSON function JSONQuery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { return json_encode($r->fetch_all(MYSQLI_ASSOC)); } else { return $r; } } }
結果:
加載另外的一個分頁欄的方法,實現以下效果:
function LoadXinXi() { //加載分頁信息 var str = ""; var minys = 1; var maxys = 1; var key = $("#key").val(); //查總頁數 $.ajax({ async: false, url: "zys.php", data: { key: key }, type: "POST", dataType: "TEXT", success: function(d) { maxys = d; } }); str += "<span>總共:" + maxys + "頁</span> "; str += "<span id='prev'>上一頁</span>"; for(var i = page - 2; i < page + 3; i++) { if(i >= minys && i <= maxys) { if(i == page) { str += "<span class='dangqian' bs='" + i + "'>" + i + "</span> "; } else { str += "<span class='list' bs='" + i + "'>" + i + "</span> "; } } } str += "<span id='next'>下一頁</span>"; $("#xinxi").html(str); //給上一頁添加點擊事件 $("#prev").click(function() { page = page - 1; if(page < 1) { page = 1; } Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) //給下一頁加點擊事件 $("#next").click(function() { page = page + 1; if(page > maxys) { page = maxys; } Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) //給中間的列表加事件 $(".list").click(function() { page = parseInt($(this).attr("bs")); Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) }
php處理文件(zys.php):
<?php include("DBDA.class.php"); $db = new DBDA(); $key = $_POST["key"]; $num = 20; $sql = "select count(*) from chinastates where areaname like '%{$key}%'"; $zts = $db->StrQuery($sql); echo ceil($zts/$num);
主頁代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> <script src="jquery-1.11.2.min.js"></script> <style type="text/css">.dangqian { background-color: #69F }</style> </head> <body> <div> <input type="text" id="key" /> <input type="button" value="查詢" id="chaxun" /> </div> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代號</td> <td>名稱</td> <td>父級代號</td> </tr> <tbody id="nr"> </tbody> </table> <div id="xinxi"> </div> </body> <script type="text/javascript">var page = 1; //當前頁 Load(); //加載數據 LoadXinXi(); //加載分頁信息 //查詢 $("#chaxun").click(function() { page = 1; Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) function Load() { var key = $("#key").val(); //查詢條件 $.ajax({ url: "chuli.php", data: { page: page, key: key }, type: "POST", dataType: "JSON", success: function(data) { var str = ""; for(var k in data) { str += "<tr><td>" + data[k].AreaCode + "</td><td>" + data[k].AreaName + "</td><td>" + data[k].ParentAreaCode + "</td></tr>"; } $("#nr").html(str); } }); } function LoadXinXi() { var str = ""; var minys = 1; var maxys = 1; var key = $("#key").val(); //查總頁數 $.ajax({ async: false, url: "zys.php", data: { key: key }, type: "POST", dataType: "TEXT", success: function(d) { maxys = d; } }); str += "<span>總共:" + maxys + "頁</span> "; str += "<span id='prev'>上一頁</span>"; for(var i = page - 2; i < page + 3; i++) { if(i >= minys && i <= maxys) { if(i == page) { str += "<span class='dangqian' bs='" + i + "'>" + i + "</span> "; } else { str += "<span class='list' bs='" + i + "'>" + i + "</span> "; } } } str += "<span id='next'>下一頁</span>"; $("#xinxi").html(str); //給上一頁添加點擊事件 $("#prev").click(function() { page = page - 1; if(page < 1) { page = 1; } Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) //給下一頁加點擊事件 $("#next").click(function() { page = page + 1; if(page > maxys) { page = maxys; } Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) //給中間的列表加事件 $(".list").click(function() { page = parseInt($(this).attr("bs")); Load(); //加載數據 LoadXinXi(); //加載分頁信息 }) }</script> </html>
實現分頁效果: