您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用jquery+Ajax實現簡單分頁條”,在日常操作中,相信很多人在怎么用jquery+Ajax實現簡單分頁條問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用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">«</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">«</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">»</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">»</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">«</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">«</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">»</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">»</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">«</span> </a> </li> <li><a href="#">1</a></li> <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> <span id="total_sp">共2條記錄,共1頁</span> </ul> </nav> </div> </div> </body> </html>
七、效果展示
這只是一個簡單的分頁條,沒有百度分頁條“前五后四”的效果。當數據量變得非常龐大時,這個分頁條就會占據很大的空間。有時間的話再優化一下吧。至于Jquery代碼,代碼的注釋里已經寫得夠清楚了,這里就不再做過多的解釋。
到此,關于“怎么用jquery+Ajax實現簡單分頁條”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。