亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

jquery+Ajax實(shí)現(xiàn)簡(jiǎn)單分頁(yè)條效果

 更新時(shí)間:2021年06月16日 17:31:07   作者:YSoup  
這篇文章主要為大家詳細(xì)介紹了jquery+Ajax實(shí)現(xiàn)簡(jiǎn)單分頁(yè)條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了jquery+Ajax實(shí)現(xiàn)分頁(yè)條效果的具體代碼,供大家參考,具體內(nèi)容如下

一、如果是jsp頁(yè)面的話,可以用EL表達(dá)式和JSTL標(biāo)簽制作一個(gè)分頁(yè)條,沒(méi)有什么難度。用EL表達(dá)式和JSTL標(biāo)簽實(shí)現(xiàn)的缺點(diǎn)就是無(wú)法實(shí)現(xiàn)異步效果,整個(gè)頁(yè)面是重新刷新了一遍的。

二、如果是普通的html頁(yè)面,當(dāng)然是無(wú)法使用EL表達(dá)式和JSTL標(biāo)簽的,這時(shí)只能通過(guò)異步Ajax的方式去實(shí)現(xiàn)。當(dāng)然了,JSP頁(yè)面兩種方式都是可以使用的。

三、分頁(yè)條,這里我是用Ajax和Jquery去做的。實(shí)現(xiàn)起來(lái)比較繁瑣,代碼特別長(zhǎng),因?yàn)槎际瞧唇右淮蠖训淖址?,然后使用html()方法或是append()方法去改變文檔的內(nèi)容。

四、事前分析

瀏覽器端需要發(fā)送給服務(wù)器端的參數(shù)有兩個(gè):

①當(dāng)前的頁(yè)碼currentPage;
②頁(yè)面的大?。ㄒ豁?yè)顯示幾條記錄)pageSize。

服務(wù)器端給瀏覽器端發(fā)送的是Json格式的數(shù)據(jù),也就是一個(gè)頁(yè)面實(shí)體類PageBean。其中PageBean有如下字段:

①總記錄數(shù)totalCount;
②總頁(yè)碼totalPage;
③每頁(yè)的數(shù)據(jù) List list;
④當(dāng)前頁(yè)碼currentPage;
⑤每頁(yè)顯示的記錄數(shù)pageSize。

這個(gè)PageBean支持泛型,代碼如下:

public class PageBean<T> 
{
    private int totalCount; // 總記錄數(shù)
    private int totalPage ; // 總頁(yè)碼
    private List<T> list ; // 每頁(yè)的數(shù)據(jù)
    private int currentPage ; //當(dāng)前頁(yè)碼
    private int rows;//每頁(yè)顯示的記錄數(shù),也就是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 +
                '}';
    }
}

要想做到分頁(yè),肯定要用到SQL語(yǔ)句中的“l(fā)imit”。舉個(gè)例子說(shuō)明一下含義。

select * from student limit 2,5;

具體含義:從student表當(dāng)中查詢數(shù)據(jù),從索引為“2”的記錄開(kāi)始查詢,往后查5條。

索引是從0開(kāi)始的,所以上面的語(yǔ)句相當(dāng)于查詢了第3、第4、第5、第6、第7條記錄,總共5條記錄。

總而言之,第一個(gè)數(shù)字就是“從哪開(kāi)始查”的意思,第二個(gè)數(shù)字就是“往后查幾條”的意思。

這里的“從哪開(kāi)始查”,需要計(jì)算出來(lái)。公式如下:

(currentPage-1)×pageSize

也就是當(dāng)前頁(yè)碼減去一,括號(hào),在乘以頁(yè)面大小。

所以查詢語(yǔ)句的偽代碼如下:

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

對(duì)于總頁(yè)碼totalPage,可以通過(guò)總記錄數(shù)totalCount和頁(yè)面大小pageSize計(jì)算出來(lái)。代碼如下:

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

五、服務(wù)器端主要代碼

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();//從數(shù)據(jù)庫(kù)獲取總記錄數(shù)
        int totalPage;//先聲明一下總的頁(yè)碼,總的頁(yè)碼需要根據(jù)客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù)進(jìn)行計(jì)算

        String currentPage = request.getParameter("currentPage");
        String pageSize = request.getParameter("pageSize");
        int intCurrentPage = Integer.parseInt(currentPage);//用戶發(fā)來(lái)的當(dāng)前頁(yè)碼
        if(intCurrentPage==0)//用戶點(diǎn)擊上一頁(yè)按鈕,currentPage就減1,會(huì)出現(xiàn)減到0的情況
        {
            intCurrentPage=1;//如果用戶的currentPage=0,直接把頁(yè)碼設(shè)為1,把第一頁(yè)的數(shù)據(jù)返回給客戶端
        }

        int intPageSize = Integer.parseInt(pageSize);//用戶發(fā)來(lái)的頁(yè)面大小
        totalPage=totalCount%intPageSize==0?totalCount/intPageSize:(totalCount/intPageSize+1);//計(jì)算出總的頁(yè)數(shù)
        if(intCurrentPage>totalPage)//用戶點(diǎn)擊下一頁(yè)按鈕,currentPage就加1,會(huì)出現(xiàn)大于總頁(yè)數(shù)的情況
        {
            intCurrentPage=totalPage;//把當(dāng)前頁(yè)碼設(shè)為總頁(yè)數(shù)
        }

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

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

    }

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

        this.doPost(request, response);

    }
}

六、前端代碼(很長(zhǎng))

<%--
  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. 導(dǎo)入CSS的全局樣式 -->
    <link href="css/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery導(dǎo)入,建議使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 導(dǎo)入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <script>
        $(function () //入口函數(shù)
        {
            $.post("ViewRainByPageServlet",{currentPage:1,pageSize:5},function (data)//頁(yè)面加載完成之后發(fā)送ajax請(qǐng)求,請(qǐng)求前5條記錄,完成界面的初始化
            {
               var totalCount=data.totalCount;//總記錄數(shù)
               var totalPage=data.totalPage;//總頁(yè)數(shù)
               var currentPage=data.currentPage;//當(dāng)前頁(yè)碼

                if(currentPage==1)//如果當(dāng)前頁(yè)碼為1,用戶還點(diǎn)擊上一頁(yè)的話,設(shè)置class="disabled" ,即出現(xiàn)一個(gè)“禁用”圖標(biāo)
                {
                    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//否則上一頁(yè)的按鈕就是正常的樣式
                {
                    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++)//遍歷頁(yè)碼,這是兩個(gè)圖標(biāo)(上一頁(yè)和下一頁(yè))之間的數(shù)字
                {
                    if(i==currentPage)//如果當(dāng)前的這個(gè)數(shù)字等于當(dāng)前頁(yè)碼currentPage,就設(shè)置class="active",即頁(yè)碼呈高亮樣式
                    {
                        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)//如果當(dāng)前頁(yè)碼為最后一頁(yè),用戶還點(diǎn)擊下一頁(yè)的話,設(shè)置class="disabled" ,即出現(xiàn)一個(gè)“禁用”圖標(biāo)
                {
                    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 style="font-size: 24px" id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁(yè)</span>';

                }
                else //不是最后一頁(yè),就是正常的樣式
                {
                    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 style="font-size: 24px" id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁(yè)</span>';

                }

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

                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 style="text-align: center">'+id+'</td>\n' +
                        '                <td style="text-align: center">'+area+'</td>\n' +
                        '                <td style="text-align: center">'+precipitation+'</td>\n' +
                        '                <td style="text-align: center">'+month+'</td>\n' +
                        '                <td style="text-align: center">'+releaseDate+'</td>\n' +
                        '            </tr>');
                }

            });//頁(yè)面加載完成之后發(fā)送ajax請(qǐng)求end

        });//入口函數(shù)end



        //頁(yè)面按鈕的點(diǎn)擊回調(diào)函數(shù),不需要寫在入口函數(shù)里面,因?yàn)橹挥许?yè)面按鈕被點(diǎn)擊時(shí),這個(gè)函數(shù)才會(huì)被調(diào)用
        function findByPage(curPage,paSize) //被調(diào)用的時(shí)候,需要傳遞兩個(gè)參數(shù):當(dāng)前頁(yè)碼和頁(yè)碼的大?。ㄒ豁?yè)有幾條記錄)
        {
            $.post("ViewRainByPageServlet",{currentPage:curPage,pageSize:paSize},function (data) //發(fā)送ajax請(qǐng)求
            {
                var totalCount=data.totalCount;//總記錄數(shù)
                var totalPage=data.totalPage;//總頁(yè)數(shù)
                var currentPage=data.currentPage;//當(dāng)前頁(yè)碼


                if(currentPage==1)//如果當(dāng)前頁(yè)碼為1,用戶還點(diǎn)擊上一頁(yè)的話,設(shè)置class="disabled" ,即出現(xiàn)一個(gè)“禁用”圖標(biāo)
                {
                    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//不為第一頁(yè),上一頁(yè)按鈕就是正常的樣式
                {
                    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>';

                }


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

                        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)//如果當(dāng)前頁(yè)碼為最后一頁(yè),用戶還點(diǎn)擊下一頁(yè)的話,設(shè)置class="disabled" ,即出現(xiàn)一個(gè)“禁用”圖標(biāo)
                {
                    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 style="font-size: 24px" id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁(yè)</span>';

                }
                else //不是最后一頁(yè),就是正常的樣式
                {
                    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 style="font-size: 24px" id="total_sp">共'+totalCount+'條記錄,共'+totalPage+'頁(yè)</span>';

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

                //表格的字符串
                var tableStr='<caption style="text-align: center;font-size: 24px">降雨信息一覽</caption>\n' +
                    '            <tr class="success">\n' +
                    '                <th style="text-align: center">id</th>\n' +
                    '                <th style="text-align: center">地區(qū)</th>\n' +
                    '                <th style="text-align: center">降雨量(mm)</th>\n' +
                    '                <th style="text-align: center">月份</th>\n' +
                    '                <th style="text-align: center">發(fā)布日期</th>\n' +
                    '            </tr>';
                var array=data.list;//具體內(nèi)容的對(duì)象數(shù)組
                for(var i=0;i<array.length;i++)//遍歷數(shù)對(duì)象組
                {
                    var obj=array[i];//數(shù)組的一個(gè)元素就是一個(gè)對(duì)象
                    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 style="text-align: center">'+id+'</td>\n' +
                        '                <td style="text-align: center">'+area+'</td>\n' +
                        '                <td style="text-align: center">'+precipitation+'</td>\n' +
                        '                <td style="text-align: center">'+month+'</td>\n' +
                        '                <td style="text-align: center">'+releaseDate+'</td>\n' +
                        '            </tr>';

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

            });//ajax請(qǐng)求end

        }//頁(yè)面按鈕的點(diǎn)擊函數(shù)end

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

        <table class="table table-bordered table-hover" id="rain_table">
            <caption style="text-align: center;font-size: 24px">降雨信息一覽</caption>
            <tr class="success">
                <th style="text-align: center">id</th>
                <th style="text-align: center">地區(qū)</th>
                <th style="text-align: center">降雨量(mm)</th>
                <th style="text-align: center">月份</th>
                <th style="text-align: center">發(fā)布日期</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 style="font-size: 24px" id="total_sp">共2條記錄,共1頁(yè)</span>
            </ul>
        </nav>



    </div>

</div>

</body>
</html>

七、效果展示

這只是一個(gè)簡(jiǎn)單的分頁(yè)條,沒(méi)有百度分頁(yè)條“前五后四”的效果。當(dāng)數(shù)據(jù)量變得非常龐大時(shí),這個(gè)分頁(yè)條就會(huì)占據(jù)很大的空間。有時(shí)間的話再優(yōu)化一下吧。至于Jquery代碼,代碼的注釋里已經(jīng)寫得夠清楚了,這里就不再做過(guò)多的解釋。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論