1. 程式人生 > >tp5+ajax+jq實現無重新整理分頁

tp5+ajax+jq實現無重新整理分頁

tp5框架裡面自帶有panigate()+rende()的方法可以超簡單的實現分頁,但是就是看著一直要重新整理很不爽,所以找了網上的好多程式碼,終於找到了一個邏輯簡單的無重新整理分頁,以下是我更改適合之後實現的效果

程式碼裡面有詳細註釋了,就不多說了,說明一下分頁查詢的原理吧:點選一個分頁按鈕,ajax向後端傳一個頁碼(curPage)引數,變換起始位置達到分頁的效果,然後通過查詢方法limit('起始位置','顯示數量')查詢資料並渲染;

html程式碼:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>測試</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.css">
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
</head>
<style>
    #pageBar {
        text-align: right;
        padding: 0 20px 20px 0;
    }

    .pageBtn a {
        display: inline-block;
        border: 1px solid #aaa;
        padding: 2px 5px;
        margin: 0 3px;
        font-size: 13px;
        background: #ECECEC;
        color: black;
        text-decoration: none;
        -moz-border-radius: 2px;
        -webkit-border-radius: 3px;
    }

    .pageBtn-selected a {
        display: inline-block;
        border: 1px solid #aaa;
        padding: 2px 5px;
        margin: 0 3px;
        font-size: 13px;
        background: #187BBD;
        color: white;
        text-decoration: none;
        -moz-border-radius: 2px;
        -webkit-border-radius: 3px;
    }

    .pageBtn a:hover {
        background: #187BBD;
        color: white;
    }
</style>
<body>

<div class="jumbotron">

    <div id="data-area">
        <ul>                <!--這裡新增分頁資料-->               </ul>
    </div>
    <div id="pageBar"><!--這裡新增分頁按鈕欄--></div>

</body>

<!--<script type="text/javascript" src="__STATIC__/index/jquery-3.2.1.min.js"></script>-->
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
<script src="__STATIC__/index/js/ajaxPage.js"></script>
</html>

php程式碼(控制器):

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    /**
     * @return mixed
     * 主頁
*/
public function index()
    {
        return $this->fetch();

    }

    /**
     * @throws \think\db\exception\DataNotFoundException
     * 
@throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * 分頁資料處理查詢 * :ajax查詢返回資料 */ public function getPage(){ if(request()->isAjax()){ //1.獲取資料(curPage) $page=input('get.'); $curPage = $page['curPage']; //2.定義分頁所需的資料 $totalItem = '10'; //總記錄數(自行定義) $pageSize='4'; //每一頁記錄數(自行定義) $totalPage =ceil($totalItem/$pageSize); //總頁數 $startItem = ($curPage-1) * $pageSize;//根據頁碼來決定查詢資料的節點 //3.查詢資料 $res=db('content') ->limit($startItem,$pageSize) ->select(); //4.放入所有資料 $arr['totalItem']=$totalItem; $arr['pageSize']=$pageSize; $arr['totalPage']=$totalPage; foreach
($res as $lab) { $arr['data_content'][] = $lab; } //5.結果返回(此處沒有判定是否查詢成功) $this->result($arr,'1','成功','json'); } } }

ajaxPage.js程式碼:

var curPage;        //當前頁數
var totalItem;      //總記錄數
var pageSize;       //每一頁記錄數
var totalPage;      //總頁數

// curPage = getUrlParam('page')

/**
 * 獲取url裡面的引數(name)!!!!個人私藏
 *
 **/
/*   function getUrlParam(name) {
       var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構造一個含有目標引數的正則表示式物件
       var r = window.location.search.substr(1).match(reg);  //匹配目標引數

       if (r != null)
           return unescape(r[2]);
       return null; //返回引數值
   }*/

//獲取分頁資料
function turnPage(page) {
    $.ajax({
        type: 'get',
        url: 'getPage',     //這裡是請求的後臺地址,自己定義
        data: {'curPage': page},
        dataType: 'json',
        beforeSend: function () {
            $("#data-area ul").append("載入中...");
        },
        success: function (data) {

            $("#data-area ul").empty();       //移除原來的分頁資料
            totalItem = data.data.totalItem; // 返回的總記錄數
            pageSize = data.data.pageSize; //返回的每一頁記錄數
            curPage = page; //返回的當前頁碼
            totalPage = data.data.totalPage; //返回的總頁數

            console.log("totalItem:"+totalItem);
            console.log("pageSize:"+pageSize);
            console.log("curPage:"+curPage);
            console.log("totalPage:"+totalPage);

            var data_content = data.data.data_content; //返回的資料內容
            console.log(data_content);
            var data_html = ""; //資料輸出的html程式碼

            //新增新的分頁資料(資料的顯示樣式根據自己頁面來設定,這裡只是一個簡單的列表)
            $.each(data_content, function (index, array) {
                data_html += "<li>" + array['id'] + "&nbsp;" + array['title'] + "&nbsp;" + array['article'] + "&nbsp;" + array['time'] + "</li>";
            }); //遍歷資料,形成html程式碼

            $("#data-area ul").append(data_html); //輸出html程式碼
            getPageBar();
        },
        /*            complete: function() {    //新增分頁按鈕欄
                       getPageBar();
                    },*/
        error: function () {
            alert("資料載入失敗");
        }
    });
}
/*    curPage;    //當前頁數
      totalItem;  //總記錄數
      pageSize;   //每一頁記錄數
      totalPage;  //總頁數
    */
//獲取分頁條(分頁按鈕欄的規則和樣式根據自己的需要來設定)
function getPageBar() {
    //防止資料錯誤時候出現當前頁數大於總頁數
    if (curPage > totalPage) {
        curPage = totalPage;
    }
    //防止資料錯誤時候出現當前頁數小於第一頁
    if (curPage < 1) {
        curPage = 1;
    }
    //定義分頁按鈕html程式碼
    pageBar = "";

    //如果不是第一頁
    if (curPage != 1) {
        pageBar += "<span class='pageBtn'><a href='javascript:turnPage(1)'>首頁</a></span>";
        pageBar += "<span class='pageBtn'><a href='javascript:turnPage("+(curPage-1)+")'>上一頁</a></span>";
    }

    //顯示的頁碼按鈕(5個)

    //定義start 和end兩個變數準備迴圈輸出可見的分頁按鈕
    var start, end;
    if (totalPage <= 5) {
        start = 1;
        end = totalPage;
    } else {
        //當前頁碼與總頁數相差1個的時候,要顯示之前的頁碼
        if (totalPage - curPage < 2) {
            start = totalPage - 4;
            end = totalPage;
        } else {
            //顯示前面兩個和後面兩個
            start = curPage - 2;
            end = curPage + 2;
        }
    }
    //迴圈輸出分頁按鈕
    for (var i = start; i <= end; i++) {

        if (i == curPage) {
            pageBar += "<span class='pageBtn-selected'><a href='javascript:turnPage(" + i + ")'>" + i + "</a></span>";
        } else {
            pageBar += "<span class='pageBtn'><a href='javascript:turnPage(" + i + ")'>" + i + "</a></span>";
        }
    }

    //如果不是最後頁,顯示輸出“下一頁 , 末頁”

    if (curPage != totalPage) {
        pageBar += "<span class='pageBtn'><a href='javascript:turnPage(" + (parseInt(curPage) + 1) + ")'>下一頁</a></span>";
        pageBar += "<span class='pageBtn'><a href='javascript:turnPage(" + totalPage + ")'>末頁</a></span>";
    }
    //匹配改變pageBar裡面的內容
    $("#pageBar").html(pageBar);
}

//頁面載入時初始化分頁
$(function () {
    turnPage(1);
});