PHP-Ajax实现无刷新分页

1.创建数据库并插入数据

create database shop;
use shop;

CREATE TABLE ecs_goods (
goods_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
goods_name VARCHAR(32) NOT NULL,
market_price VARCHAR(32) NOT NULL,
PRIMARY KEY(goods_id));
select * from ecs_goods;

INSERT INTO ecs_goods VALUES(1,'KD876','166.60'),(2,'KD111','164.60');
INSERT INTO ecs_goods VALUES(3,'KD876','169.60'),(4,'KD111','170.60');
INSERT INTO ecs_goods VALUES(5,'KD876','177.60'),(6,'KD111','179.60');
INSERT INTO ecs_goods VALUES(7,'KD876','187.60'),(8,'KD111','199.60');
INSERT INTO ecs_goods VALUES(9,'KD876','1607.60'),(10,'KD111','1609.60');
2.编写page.class.php程序实现商品分页的功能

<?php

class page{
	private $total;//总页数
	private $size;//每页记录数
	private $url;//url地址
	private $page;//当前页码
	/**
	*@param $total 总记录数
	*@param $size 每页记录数
	*@param $url URL地址
	*/
	public function __construct($total,$size,$url='')
	{
		//计算页数,向上取证
		$this->total = ceil($total/$size);
		//每页的记录数
		$this->size = $size;
		//为URL添加GET参数
		$this->url = $this->setUrl($url);
		//获得当前页码
		$this->page = $this->getNowPage();
	}
	/**
	*获得当前页码
	*/
	private function getNowPage()
	{
		$page = !empty($_GET['page']) ? $_GET['page']:1;
		if($page<1){
			$this->page = 1;
		}else if($page> $this->total){
			$page = $this->total;
		}
		return $page;
	}
	/**
	*位URL添加Get参数,去掉page参数
	*/
	private function setUrl($url)
	{

		$url .='?';
		foreach ($_GET as $k => $v) {
			if($k!='page'){
				$url.="$k=$v&";
			}
		}
		return $url;
	}
	/**
	*获得分页导航
	*/
	public function getPageList(){
		//总页数不超过1时直接返回空结果
		if($this->total<=1)
		{
			return '';
		}
		//拼接分页导航的HTML
		$html ='';
		if($this->page>4){
			$html ="<a href=\"#\" onclick =\"getGoods('{$this->url}page=1')\">1</a>...";
		}
		for ($i=$this->page-3,$len=$this->page+3 ;$i<=$len && $i<=$this->total; $i++){ 
			if($i>0){
				if($i == $this->page){
					$html .="<a href=\"#\" onclick =\"getGoods('{$this->url}page=$i')\" class = \"curr\">$i</a>";
				}else {
					$html .="<a href=\"#\" onclick =\"getGoods('{$this->url}page=$i')\">$i</a>";
				}
			}
		}
		if ($this->page+3<$this->total) {
			$html .="...<a href=\"#\" onclick =\"getGoods('{$this->url}page={$this->total}')\">{$this->total}</a>";
		}
		return $html;
	}
	public function getLimit(){
		if ($this->total == 0) {
			return '0,0';
		}
		return ($this->page-1)*$this->size.",{$this->size}";
	}
}
?>
3.创建获取商品列表的data.php程序,实现每页显示3条记录的功能。

<?php
	header("Content-Type:text/html;charset=utf-8");
	//引入分页类
	include "./page.class.php";
	//使用PDO连接数据库
	//数据库服务器类型是MySQL
	$dbms ='mysql';
	//数据库服务器主机名,端口号,选择的数据库
	$host = 'localhost';
	$port = '3306';
	$dbname = 'shop';
	//用户名和密码
	$user = 'root';
	$pwd = 'newpassword';

	$dsn = "$dbms:host=$host;port=$port;dbname=$dbname";
	//设定字符集

	$options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES \'UTF8\'');
	//创建数据库连接
	try
	{
		$pdo = new PDO($dsn,$user,$pwd,$options);
		//echo 'PDO数据库连接成功!';
		//SQL预处理语句
		$stmt1 = $pdo->query("select count(*) from ecs_goods");  
		//var_dump($stmt1);
		//实例化分页类对象
		$total = $stmt1->fetchColumn();
		$per = 3;
		$page = new page($total,$per,'./data.php');
	
		//执行SQL语句
		$stmt = $pdo->prepare("select goods_id,goods_name,market_price from ecs_goods limit ".$page->getLimit());
		//获得页码列表信息
		$pageList = $page->getPageList();
		//执行SQL预处理语句
		$stmt->execute();
	}
	catch(PDOException $e)
	{
		echo $e->getMessage().'<br>';
	}
	//查询-结果
	$data = $stmt ->fetchAll(PDO::FETCH_ASSOC);
	//将分页信息追加到$data数组中
	$data[] = $pageList;
	//输出页面
	//var_dump($data);

	echo json_encode($data);
?>
4.创建一个home.html文件,使用Ajax获取服务器端的数据

<!DOCUMENT 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" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
	<title>商品列表</title>
	<script type="text/javascript">
		//通过页面加载事件实现分页数据获取
		function getGoods(url){
			
			//通过Ajax对象获得分页信息
			var obj = new XMLHttpRequest();
			obj.onreadystatechange =function(){
				if (obj.readyState == 4 && obj.status ==200 ) {
					//接收服务器的相应信息
					//alert("obj.responseText:"+obj.responseText);
					var info = eval('('+obj.responseText+')');
					//alert("obj.responseText:"+info[1].goods_name);
					alert("info.length:"+info[info.length-1]);
					//console.log("info");
					//拼接输出字符串
					var dataList = "<tr><td>ID</td><td>名称</td><td>价格</td></tr>";
					for (var i = 0; i < info.length-1; i++) {
						dataList += "<tr><td>"+info[i].goods_id+"</td>";
						dataList += "<td>"+info[i].goods_name+"</td>";
						dataList += "<td>"+info[i].market_price+"</td></tr>";
					}
					dataList += "<tr><td colspan=3>"+info[info.length-1]+"</td></tr>";
					//将字符串写入网页
					document.getElementById('result').innerHTML = dataList;
				}
			}
			obj.open('get',url);
			obj.send();
		}
		window.onload = function(){
			getGoods('./data.php');
		}
	</script>
	<style type="text/css">
		table{width: 600px; cellspacing 2px;background-color:#333333;}
		tr{height: 30px;}
		td{width: 200px;background-color: #ffffff;text-align: center;}
		h2{text-align: center;}
		.curr{background-color: #f0f0f0;border:1px solid #999;}
		a:hover{background: #f0f0f0;border:1px solid #999}
		a{border:1px solid #fff;text-decoration: none;color: #999;padding: 2px 4px;margin:0 2px;line-height: 20px;}

	</style>
</head>
<body>
<h2>Ajax实现商品列表无刷新分页</h2>
<table id="result" align="center"></table>
<div id="bottom" align="center"></div>
</body>
<script type="text/javascript">
	//获取一个随机数,用于判断无刷新分页效果
	var num ="随机数值:";
	num += Math.ceil(Math.random()*10);
	//将随机数字符串写入网页
	document.getElementById('bottom').innerHTML = num;
</script>
</html>
5.运行结果



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值