Ajax+php+jquery无刷新分页处理

9 篇文章 0 订阅
3 篇文章 0 订阅

日常酱油.....

如下动图:

主要解决的问题如下:

1.使用PDO连接数据库

2.PDO::query 执行SQL语句,返回PDOStatement对象,可以理解为结果集

3.PDOStatement::fetchColumn 从结果集中的下一行返回单独的一列

4.ceil() : 函数向上舍入为最接近的整数,如:
ceil(0.60); //1
ceil(0.40);//1
ceil(5);//5
ceil(5.1);//6
ceil(-5.1);//-1
ceil(-5.9);//-5

5. 关键点:如何得到指定范围内的数据,使用: SELECT * FROM news LIMIT start, size
start :表示截取数据的开始位置(下标从0开始)
size:表示截取的长度
如:


6. PHP关联数组
关联数组是使用分配给数组的指定的键的数组
创建关联数组的方法:
$age = array("peter"=>"35","Ben"=>"37","Joe"=>"43");
或者
$age["Peter"]="35";
$age["Ben"]="37";
$age["Joe"]="43";
取出值:$age["Peter"] // 35
遍历方法:可以使用foreach
foreach($age as $x=>$x_value){
echo "key=" . $x .", Value=" . $x_value;
echo "<br>";
}


7. HTML data-*属性
data-* 属性用于存储私有页面后应用的自定义数据
data-* 属性可以在所有的HTML元素中嵌入数据
自定义的数据可以让页面拥有更好的交互体验(不需要使用ajax或去服务端查询数据)
data-* 属性由以下两部分组成:
1.属性名不要包含大写字母,在data-后必须至少有一个字符
2.该属性可以是任何字符串
注意:自定义属性前缀"data-"会被客户端忽略

8. JSON.parse(): 可以把JSON 字符串转换为JSON对象


9. 分页总体设计思路

后端:获取当前页页数,从数据库中取出该范围内得数据,并返回
前端:
1.默认显示数据
2.获取后端返回得数据,并展示
3.分页链接的生成(关键点:最大分页数,获取当前页数,为分页连接绑定点击事件)


10.
PDOStatement::fetchAll 返回一个包含结果集中所有行的数组
PDO::TETCH_ASSOC 返回一个索引为结果集列名的数组
json_encode 对变量进行JSON编码,该函数如果执行成功返回jason数据


代码:
index.html
<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title></title>
        <link rel="stylesheet" href="css/index.css" />
        <script type="text/javascript" src="js/jquery.min.js"></script>
    </head>

    <body>
        <div class="box">
            <div class="title">
                PHP + Ajax + jQuery 无刷新分页
            </div>
            <!--页面内容-->
            <div class="list">
                <ul class="content"></ul>
            </div>
            <!--分页链接-->
            <div class="pagelist">
            </div>
        </div>
        <script>
            $(function() {
                var page = 1;
                var n = 0;
                var max = 1;
                getData();
                /*获取指定页的数据*/
                function getData() {
                    $.ajax({
                        type: "GET",
                        url: "ajax.php",
                        data: {
                            "page": page
                        },
                        dateType: "json",
                        success: function(json) {
                            json = JSON.parse(json);
                            n = json.total;
                            max = json.max;
                            content(json.list);
                        },
                        complete: function() {
                            pageList();
                        },
                        error: function() {
                            alert("请求错误");
                        }
                    });
                }

                /*生成分页连接*/
                function pageList() {
                    page = Math.min(page, max);
                    page = Math.max(page, 1);
                    var html = "<div><span>共" + n + "条,第" + page + "/" + max + "页</span>";
                    html += '<a href="#" data-page="1">首页</a>';
                    html += (page > 1) ? '<a href="#" data-page="' + (page - 1) + '">上一页</a>' : '<a href="#" data-page="1">上一页</a>';
                    html += (page < max) ? '<a href="#" data-page="' + (page + 1) + '">下一页</a>' : '<a href="#" data-page="' + max + '">下一页</a>';
                    html += '<a href="#" data-page="' + max + '">尾页</a></div>';
                    var $html = $(html);
                    //为链接添加单击事件
                    $html.find("a").click(function() {
                        page = $(this).attr("data-page");
                        getData();
                    });
                    $(".pagelist").html($html);

                }
                /*生成内容*/
                function content(list) {
                    var str = " ";
                    for(var i in list) {
                        str += '<li><img src="' + list[i]['pic'] + '"/><p><a href="#">' + list[i]['title'] + '</a></p></li>'
                    }
                    $(".content").html(str);
                }
            })
        </script>
    </body>

</html>
ajax.php
$start = ($page-1) * $size;
$sql = "SELECT * FROM `books` limit $start,$size";
$data = $conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
$result = array(
    'total' => $n,
    'max' => $max,
    'list' => array()
);
foreach($data as $v){
	$result['list'][] = array(
	 'id' => $v["id"],
	 'title' => $v["title"],
	 'pic' => $v["pic"]
	);
}
echo json_encode($result); 
?>

简单样式

index.css

body {
    margin: 0;
    background: whitesmoke;
    color: #555;
}

div.box {
    color: firebrick;
    width: 900px;
    position: relative;
    margin: 0 auto;
}

div.title {
    text-align: center;
}

ul.content {
    list-style: none;
}

li {
    width: 250px;
    height: 210px;
    float: left;
    border: 1px solid gainsboro;
    font-size: 12px;
    text-decoration: none;
}

div.pagelist {
    position: absolute;
    top: 500px;
    left: 200px;
}

img {
    width: 250px;
    height: 155px;
    margin: 0px;
}

.content a,
.pagelist a {
    cursor: pointer;
    font-size: 16px;
    text-decoration: none;
    font-family: "微软雅黑";
}

.content a:hover,
.pagelist a:hover {
    color: firebrick;
}

完整代码连接: 代码下载





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值