中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用jquery+Ajax實現簡單分頁條

發布時間:2022-03-31 10:48:33 來源:億速云 閱讀:129 作者:iii 欄目:開發技術

這篇文章主要介紹了如何用jquery+Ajax實現簡單分頁條的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何用jquery+Ajax實現簡單分頁條文章都會有所收獲,下面我們一起來看看吧。

一、如果是jsp頁面的話,可以用EL表達式和JSTL標簽制作一個分頁條,沒有什么難度。用EL表達式和JSTL標簽實現的缺點就是無法實現異步效果,整個頁面是重新刷新了一遍的。

二、如果是普通的html頁面,當然是無法使用EL表達式和JSTL標簽的,這時只能通過異步Ajax的方式去實現。當然了,JSP頁面兩種方式都是可以使用的。

三、分頁條,這里我是用Ajax和Jquery去做的。實現起來比較繁瑣,代碼特別長,因為都是拼接一大堆的字符串,然后使用html()方法或是append()方法去改變文檔的內容。

四、事前分析

瀏覽器端需要發送給服務器端的參數有兩個:

①當前的頁碼currentPage;
②頁面的大小(一頁顯示幾條記錄)pageSize。

服務器端給瀏覽器端發送的是Json格式的數據,也就是一個頁面實體類PageBean。其中PageBean有如下字段:

①總記錄數totalCount;
②總頁碼totalPage;
③每頁的數據 List list;
④當前頁碼currentPage;
⑤每頁顯示的記錄數pageSize。

這個PageBean支持泛型,代碼如下:

public class PageBean<T> 
{
    private int totalCount; // 總記錄數
    private int totalPage ; // 總頁碼
    private List<T> list ; // 每頁的數據
    private int currentPage ; //當前頁碼
    private int rows;//每頁顯示的記錄數,也就是pageSize

    public int getTotalCount() 
    {
        return totalCount;
    }

    public void setTotalCount(int totalCount)
    {
        this.totalCount = totalCount;
    }

    public int getTotalPage() 
    {
        return totalPage;
    }

    public void setTotalPage(int totalPage) 
    {
        this.totalPage = totalPage;
    }

    public List<T> getList() 
    {
        return list;
    }

    public void setList(List<T> list) 
    {
        this.list = list;
    }

    public int getCurrentPage() 
    {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) 
    {
        this.currentPage = currentPage;
    }

    public int getRows() 
    {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    @Override
    public String toString() 
    {
        return "PageBean{" +
                "totalCount=" + totalCount +
                ", totalPage=" + totalPage +
                ", list=" + list +
                ", currentPage=" + currentPage +
                ", rows=" + rows +
                '}';
    }
}

要想做到分頁,肯定要用到SQL語句中的“limit”。舉個例子說明一下含義。

select * from student limit 2,5;

具體含義:從student表當中查詢數據,從索引為“2”的記錄開始查詢,往后查5條。

索引是從0開始的,所以上面的語句相當于查詢了第3、第4、第5、第6、第7條記錄,總共5條記錄。

總而言之,第一個數字就是“從哪開始查”的意思,第二個數字就是“往后查幾條”的意思。

這里的“從哪開始查”,需要計算出來。公式如下:

(currentPage-1)×pageSize

也就是當前頁碼減去一,括號,在乘以頁面大小。

所以查詢語句的偽代碼如下:

select * from student limit (currentPage-1)×pageSize,pageSize;

對于總頁碼totalPage,可以通過總記錄數totalCount和頁面大小pageSize計算出來。代碼如下:

totalPage=totalCount%pageSize==0?totalCount/pageSize:(totalCount/pageSize+1);

五、服務器端主要代碼

import com.fasterxml.jackson.databind.ObjectMapper;
import domain.PageBean;
import domain.RainFall;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/ViewRainByPageServlet")
public class ViewRainByPageServlet extends HttpServlet
{
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
        String sql="select * from rain_fall limit ?,?";//查詢部分元組
        String sql2="select * from rain_fall";//查詢所有元組
        List<RainFall> countList = template.query(sql2, new BeanPropertyRowMapper<RainFall>(RainFall.class));
        int totalCount=countList.size();//從數據庫獲取總記錄數
        int totalPage;//先聲明一下總的頁碼,總的頁碼需要根據客戶端發送過來的數據進行計算

        String currentPage = request.getParameter("currentPage");
        String pageSize = request.getParameter("pageSize");
        int intCurrentPage = Integer.parseInt(currentPage);//用戶發來的當前頁碼
        if(intCurrentPage==0)//用戶點擊上一頁按鈕,currentPage就減1,會出現減到0的情況
        {
            intCurrentPage=1;//如果用戶的currentPage=0,直接把頁碼設為1,把第一頁的數據返回給客戶端
        }

        int intPageSize = Integer.parseInt(pageSize);//用戶發來的頁面大小
        totalPage=totalCount%intPageSize==0?totalCount/intPageSize:(totalCount/intPageSize+1);//計算出總的頁數
        if(intCurrentPage>totalPage)//用戶點擊下一頁按鈕,currentPage就加1,會出現大于總頁數的情況
        {
            intCurrentPage=totalPage;//把當前頁碼設為總頁數
        }

        int startIndex=(intCurrentPage-1)*intPageSize;//從索引為幾的記錄開始查詢?

        List<RainFall> list = template.query(sql, new BeanPropertyRowMapper<RainFall>(RainFall.class),startIndex,intPageSize);
        ObjectMapper mapper=new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");//設置響應數據類型和字符編碼
        PageBean<RainFall> pageBean=new PageBean<>();//創建PageBean對象
        //封裝PageBean對象
        pageBean.setTotalCount(totalCount);
        pageBean.setTotalPage(totalPage);
        pageBean.setList(list);
        pageBean.setCurrentPage(intCurrentPage);
        pageBean.setRows(intPageSize);
        //將數據寫回客戶端
        System.out.println(pageBean);
        mapper.writeValue(response.getOutputStream(),pageBean);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {

        this.doPost(request, response);

    }
}

六、前端代碼(很長)

<%--
  Created by Yingyong Lao.
  User: laoyingyong
  Date: 2019-12-10
  Time: 19:28
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查看降雨信息</title>
    <!-- 1. 導入CSS的全局樣式 -->
    <link href="css/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery導入,建議使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 導入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <script>
        $(function () //入口函數
        {
            $.post("ViewRainByPageServlet",{currentPage:1,pageSize:5},function (data)//頁面加載完成之后發送ajax請求,請求前5條記錄,完成界面的初始化
            {
               var totalCount=data.totalCount;//總記錄數
               var totalPage=data.totalPage;//總頁數
               var currentPage=data.currentPage;//當前頁碼

                if(currentPage==1)//如果當前頁碼為1,用戶還點擊上一頁的話,設置class="disabled" ,即出現一個“禁用”圖標
                {
                    var str=' <li class="disabled" οnclick="findByPage('+(currentPage-1)+',5)">\n' +
                        '                    <a href="#" aria-label="Previous">\n' +
                        '                        <span aria-hidden="true">&laquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>';

                }
                else//否則上一頁的按鈕就是正常的樣式
                {
                    var str=' <li οnclick="findByPage('+(currentPage-1)+',5)">\n' +
                        '                    <a href="#" aria-label="Previous">\n' +
                        '                        <span aria-hidden="true">&laquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>';

                }

                for(var i=1;i<=totalPage;i++)//遍歷頁碼,這是兩個圖標(上一頁和下一頁)之間的數字
                {
                    if(i==currentPage)//如果當前的這個數字等于當前頁碼currentPage,就設置class="active",即頁碼呈高亮樣式
                    {
                        var item='<li οnclick="findByPage('+i+',5);" class="active"><a href="#">'+i+'</a></li>';
                    }
                    else
                    {
                        var item='<li οnclick="findByPage('+i+',5);"><a href="#">'+i+'</a></li>';
                    }
                    str=str+item;

                }
                if(currentPage==totalPage)//如果當前頁碼為最后一頁,用戶還點擊下一頁的話,設置class="disabled" ,即出現一個“禁用”圖標
                {
                    var strend='<li class="disabled" οnclick="findByPage('+(currentPage+1)+',5)">\n' +
                        '                    <a href="#" aria-label="Next">\n' +
                        '                        <span aria-hidden="true">&raquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>\n' +
                        '                <span  id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁</span>';

                }
                else //不是最后一頁,就是正常的樣式
                {
                    var strend='<li οnclick="findByPage('+(currentPage+1)+',5)">\n' +
                        '                    <a href="#" aria-label="Next">\n' +
                        '                        <span aria-hidden="true">&raquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>\n' +
                        '                <span  id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁</span>';

                }

                str=str+strend;
                $("#fenyelan").html(str);//分頁條初始化

                var array=data.list;
                for(var i=0;i<array.length;i++)
                {
                    var obj=array[i];
                    var id=obj.id;
                    var area=obj.area;
                    var precipitation=obj.precipitation;
                    var month=obj.month;
                    var releaseDate=obj.releaseDate;
                    //表格的初始化
                    $("#rain_table").append('<tr class="info">\n' +
                        '                <td >'+id+'</td>\n' +
                        '                <td >'+area+'</td>\n' +
                        '                <td >'+precipitation+'</td>\n' +
                        '                <td >'+month+'</td>\n' +
                        '                <td >'+releaseDate+'</td>\n' +
                        '            </tr>');
                }

            });//頁面加載完成之后發送ajax請求end

        });//入口函數end



        //頁面按鈕的點擊回調函數,不需要寫在入口函數里面,因為只有頁面按鈕被點擊時,這個函數才會被調用
        function findByPage(curPage,paSize) //被調用的時候,需要傳遞兩個參數:當前頁碼和頁碼的大小(一頁有幾條記錄)
        {
            $.post("ViewRainByPageServlet",{currentPage:curPage,pageSize:paSize},function (data) //發送ajax請求
            {
                var totalCount=data.totalCount;//總記錄數
                var totalPage=data.totalPage;//總頁數
                var currentPage=data.currentPage;//當前頁碼


                if(currentPage==1)//如果當前頁碼為1,用戶還點擊上一頁的話,設置class="disabled" ,即出現一個“禁用”圖標
                {
                    var str=' <li class="disabled" οnclick="findByPage('+(currentPage-1)+',5)">\n' +
                        '                    <a href="#" aria-label="Previous">\n' +
                        '                        <span aria-hidden="true">&laquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>';

                }
                else//不為第一頁,上一頁按鈕就是正常的樣式
                {
                    var str=' <li οnclick="findByPage('+(currentPage-1)+',5)">\n' +
                        '                    <a href="#" aria-label="Previous">\n' +
                        '                        <span aria-hidden="true">&laquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>';

                }


                //分頁條中間數字部分
                for(var i=1;i<=totalPage;i++)
                {
                    if(i==currentPage)//如果當前的這個數字等于當前頁碼currentPage,就設置class="active",即頁碼呈高亮樣式
                    {

                        var item='<li οnclick="findByPage('+i+',5);" class="active"><a href="#">'+i+'</a></li>';
                    }
                    else
                    {
                        var item='<li οnclick="findByPage('+i+',5);"><a href="#">'+i+'</a></li>';
                    }


                    str=str+item;

                }
                if(currentPage==totalPage)//如果當前頁碼為最后一頁,用戶還點擊下一頁的話,設置class="disabled" ,即出現一個“禁用”圖標
                {
                    var strend='<li class="disabled" οnclick="findByPage('+(currentPage+1)+',5)">\n' +
                        '                    <a href="#" aria-label="Next">\n' +
                        '                        <span aria-hidden="true">&raquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>\n' +
                        '                <span  id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁</span>';

                }
                else //不是最后一頁,就是正常的樣式
                {
                    var strend='<li οnclick="findByPage('+(currentPage+1)+',5)">\n' +
                        '                    <a href="#" aria-label="Next">\n' +
                        '                        <span aria-hidden="true">&raquo;</span>\n' +
                        '                    </a>\n' +
                        '                </li>\n' +
                        '                <span  id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁</span>';

                }
                str=str+strend;
                $("#fenyelan").html(str);//改變分頁條的內容

                //表格的字符串
                var tableStr='<caption >降雨信息一覽</caption>\n' +
                    '            <tr class="success">\n' +
                    '                <th >id</th>\n' +
                    '                <th >地區</th>\n' +
                    '                <th >降雨量(mm)</th>\n' +
                    '                <th >月份</th>\n' +
                    '                <th >發布日期</th>\n' +
                    '            </tr>';
                var array=data.list;//具體內容的對象數組
                for(var i=0;i<array.length;i++)//遍歷數對象組
                {
                    var obj=array[i];//數組的一個元素就是一個對象
                    var id=obj.id;
                    var area=obj.area;
                    var precipitation=obj.precipitation;
                    var month=obj.month;
                    var releaseDate=obj.releaseDate;
                    //一行記錄的字符串
                    var oneRecord='<tr class="info">\n' +
                        '                <td >'+id+'</td>\n' +
                        '                <td >'+area+'</td>\n' +
                        '                <td >'+precipitation+'</td>\n' +
                        '                <td >'+month+'</td>\n' +
                        '                <td >'+releaseDate+'</td>\n' +
                        '            </tr>';

                    tableStr=tableStr+oneRecord;//表格字符串的追加,每遍歷一條記錄,就會追加一行
                }
                $("#rain_table").html(tableStr);//改變表格里面的內容

            });//ajax請求end

        }//頁面按鈕的點擊函數end

    </script>
</head>
<body>
<div class="container">
    <div class="row">

        <table class="table table-bordered table-hover" id="rain_table">
            <caption >降雨信息一覽</caption>
            <tr class="success">
                <th >id</th>
                <th >地區</th>
                <th >降雨量(mm)</th>
                <th >月份</th>
                <th >發布日期</th>
            </tr>
        </table>


        <nav aria-label="Page navigation">
            <ul class="pagination" id="fenyelan">
                <li>
                    <a href="#" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
                <li><a href="#">1</a></li>
                <li>
                    <a href="#" aria-label="Next">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
                <span  id="total_sp">共2條記錄,共1頁</span>
            </ul>
        </nav>



    </div>

</div>

</body>
</html>

七、效果展示

如何用jquery+Ajax實現簡單分頁條

關于“如何用jquery+Ajax實現簡單分頁條”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“如何用jquery+Ajax實現簡單分頁條”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

申扎县| 垫江县| 龙南县| 来凤县| 东港市| 海林市| 子长县| 衡南县| 右玉县| 浠水县| 达日县| 洪江市| 秀山| 凤阳县| 都江堰市| 大宁县| 通许县| 靖西县| 南投县| 长沙县| 政和县| 永兴县| 龙南县| 卫辉市| 济阳县| 中牟县| 界首市| 通州市| 车致| 乡城县| 遵义县| 肥西县| 合肥市| 通辽市| 洪雅县| 东平县| 新营市| 博兴县| 司法| 乐平市| 金阳县|