对于PHP的分页,已经有很多前辈创造了很好的方法,我就不再多讲,我主要讲讲利用AJAX来实现一种简单的方便的分页方法,希望能起到抛砖引玉的作用~~
这个实例的重点需要灵活运用AJAX,难点在于中文的编码,在这些方面我积累了一些小小的经验,希望能和大家分享;
AJAX+PHP分页的基本原理就是在数据库一定的位置上取一定量的数据,然后利用AJAX进行调用.先看看PHP分页部分:
<?php
header("Content-type: text/html;charset=GBK");//输出编码,避免中文乱码
$conn = mysql_connect('localhost','root','password') or die ('Not connected : ' . mysql_error());
mysql_select_db('web', $conn) or die ('Cannot use foo : ' . mysql_error());
//mysql_query("set character set gbk");//可选,解决Mysql中文乱码
$p = $_POST["p"];//获取页面编号
$result_t=mysql_query("select count(*) from `tablename`");
$total=mysql_fetch_array($result_t);
$total=$total[0];
$s = 20;//定义每页显示数量
$t = floor($total/$s);//总页数
if(!$p||$p<0){$p = 0;}
if($p>$t){$p = $t;}
$pp = $s*$p;
$query="select * from `tablename` order by `id` desc limit $pp,$s";//取出相应的数据
$result=mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
echo "<p>".$row['id']."</p>";
}
echo "共有".$total."条记录<a href='javascript:dopages(".($p-1).")'>上一页</a> | <a href='javascript:dopages(".($p+1).")'>下一页</a>跳转至<input type='text' id='pgs' />页<input value='跳转' type='button' onClick='dopages(".'document.getElementById("pgs").value-1);>';
?>
这样就通过简单的方法实现了分页功能,接下来就需要利用AJAX进行调用了:
function dopages(p){
var posts = "p="+p;
var url = ajaxurl('pages.php');
function func(){
getResult('dopages');
};
sendRequest(url,posts,func);
}
function ajaxurl(adDiv){
var baseurl = "http://www.tswzsj.com/" + adDiv;
return baseurl;
}
function getajax(){
var xmlhttp = false;
if(window.ActiveXObject){
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function sendRequest(url,posts,func){
ajax = getajax();
ajax.onreadystatechange = func;
ajax.open('POST', url, true);
ajax.setRequestHeader("Content-Length",posts.length);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(posts);
}
/*------------Try-------------*/
var Try = {
these: function() {
var returnValue;
for (var i = 0; i < arguments.length; i++) {
var lambda = arguments;
try {
returnValue = lambda();
break;
} catch (e) {}
}
return returnValue;
}
}
function tryCollectGarbage(){
return Try.these(
function() {return CollectGarbage();},
function() {return false;}
);
}
function getResult(adDiv,num){
if (ajax.readyState < 4) {
document.getElementById("loading").style.visibility = "visible";
}
else if (ajax.readyState == 4) {
document.getElementById("loading").style.visibility = "hidden";
if (ajax.status == 200){
var result = ajax.responseText;
if(adDiv=="dopages"){
document.getElementById('xpages').innerHTML = result;
}
}
else {
alert("出错");
delete ajax;
tryCollectGarbage();//垃圾回收
}
}
}
在这个简单的实例中为什么要用ajaxurl,sendRequest,getResult函数封装而不是直接写出代码呢?呵呵,因为我的这个PHP+AJAX的分页程序是一个综合系统中的一部分,我只是讲了其中的这一段,所以原汁原味的保留了,相信大家也可以看懂.其实另外一个重要原因是希望可以传输一些代码重用的知识,而且这种方法易于维护,特别是对于大型系统来说,可以节省很多时间.
经测试以上代码均可正常使用!