重新渲染ajax中的list,list分页的三种数据渲染做法(ajax技术)

目录

分页效果主要分为三种:

第一种:生成页码,点击可以切换到对应的页码

(一):01:的list页的数据渲染

二、01的接口

第二种:懒加载,点击加载更多,加载下一页

第三种:懒加载-滚动到底部就自动加载下一页

分页效果主要分为三种:

1:生成页码,点击可以切换到对应的页码

2:懒加载,点击加载更多,加载下一页

3:滚动到底部就自动加载下一页

第一种:生成页码,点击可以切换到对应的页码

(一):01:的list页的数据渲染

主要功能是;

1:获取第一页的内容渲染到页面

2:根据总条数和每页显示的条数,计算总页数,生成页码

3:点击页面,能够按需加载下一页的数据

4:升序降序:按照价格来

00:先引入连接数据库的ajax的封装函数js

// 封装ajax 方案2

function ajax2(opt) {

function extend(obj1, obj2) {

for (var key in obj2) {

obj1[key] = obj2[key];

}

}

//默认参数

var defaults = {

async: true

}

//后面是有默认参数

extend(defaults, opt);

var xhr = new XMLHttpRequest();

if (defaults.type.toLowerCase() == 'get') {

//get请求

if (defaults.data) {

defaults.url += '?' + defaults.data;

}

xhr.open(defaults.type, defaults.url, defaults.async);

xhr.send(null);

} else {

//post请求

xhr.open(defaults.type, defaults.url, defaults.async);

xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');

xhr.send(defaults.data);

}

//返回接受的数据

xhr.onreadystatechange = () => {

if (xhr.readyState == 4) {

if (xhr.status == 200) {

if (defaults.success) { //如果有数据就返回

defaults.success(xhr.responseText);

}

} else {

alert('错误http状态码:' + xhr.status);

}

}

}

}

(function () {

let list = document.getElementById('list'); //整个list的页面

let pages = document.getElementById('pages'); //pages下面的总页数

let btn = document.getElementById('btn'); //升降序的按钮

let iPages = 1; //第一页的数据(页的数据)

let num = 10; //每一页为10条数据

let paixu = ""; //排序,默认是没有排序的

// 初始化 获取第一页的内容渲染到页面

function init() {

ajax2({

type: 'get',

url: 'api/010.getdata.php',

data: 'page=' + iPages + '&num=' + num + '&paixu=' + paixu,

success: function (str) {

// console.log(str);

let arr = JSON.parse(str);

// console.log(arr);

let html = arr.data.map((item, index) => {

return `

${index + 1}.${item.title}

${item.price}`;

}).join("");

list.innerHTML = html; //数据渲染到页面

// 2:根据总条数和每页显示的条数,计算总页数,生成页码 (32条,然后一页10条数据,需要失业,所以要向上取整)

let pagesNum = Math.ceil(arr.pages / arr.num);

// console.log(pagesNum);

let str2 = '';

for (i = 0; i < pagesNum; i++) {

str2 += `${i + 1}`;

}

pages.innerHTML = str2;

pages.children[iPages - 1].className = 'active'; //第一页高亮

}

});

}

init();

// 3:点击页面,能够按需加载下一页的数据 (事件委托给pages)

pages.onclick = ev => {

if (ev.target.tagName.toLowerCase() == 'a') {

iPages = ev.target.innerHTML; //页数的数据渲染

init(); //调取新的数据渲染到页面

}

}

// 4:升序降序:按照价格来

btn.onclick = function () {

if (this.value == '升序') {

//升序

paixu = 'asc';

this.value = '降序';

} else {

//降序

paixu = 'desc';

this.value = '升序';

}

init();

}

})();

二、01的接口

00:需要先引入连接数据库的公共接口 08conn.php

$conn->connect_error

if($conn->connect_error){

die('错误提示:' .$conn->connect_error);

}

// echo '连接成功';

?>

01:010.getdata.php

query($sql);//

// SELECT * FROM goodlist1 ORDER BY price DESC LIMIT 0,10;//降序

// var_dump($res);//这边测试在api里面测试

//得到结果集里面的内容 num_row //得到数组

$connect = $res->fetch_all(MYSQLI_ASSOC);

//把数据传给前端,先把数据转为字符串

// echo json_encode($connect,JSON_UNESCAPED_UNICODE);//防止中文转意

//查询总条数

$sql2 = "SELECT * FROM goodlist1";

// 执行sql2语句

$res2 = $conn->query($sql2);

// var_dump($res2);

// 一个页面不用出现两个echo,否则前端数据不好处理

$data = array(

"data" => $connect,//这是10条数据

"pages" => $res2->num_rows,//这是总的条数

"page" => $page,//第几页

"num" => $num//每一页的数据条数

);

//把数据传给前端,先把数据转为字符串

echo json_encode($data,JSON_UNESCAPED_UNICODE);//防止中文转意

//最后关闭连接

$res->close();//关闭结果集

$conn->close();//关闭数据库

?>

第二种:懒加载,点击加载更多,加载下一页

分页效果

点击加载更多

先引入连接数据库的文件

JS

(function () {

/*懒加载样式一:点击一次更多,就加载下一页

1: 渲染第一页的数据

2: 如果总页数超过2页, 便显示‘ 加载更多’

3: 点击加载更多, 就可以加载下一页数据, 拼接到下一页数据下*/

//找节点

let list = document.getElementById('list');

let pages = document.getElementById('pages');

let iPage = 1; //第一页数据

let num = 10; //每一页有10条数据

let allpages = 0; //总页数

// 1: 渲染第一页的数据

function init() { //初始化数据,为了第一次的显示 数据有第一页渲染的数据和数据条数

ajax2({

type: 'get',

url: 'api/012.getdata.php',

data: 'iPage=' + iPage + '&num=' + num,

success: function (str) {

// console.log(str);

let arr = JSON.parse(str);

create(arr.data); //数据渲染

// 判断总共有多少页

allpages = Math.ceil(arr.pages / arr.num);

console.log(allpages);

if (allpages > 1 && iPage != allpages) {

// 2: 如果总页数超过2页, 便显示‘ 加载更多’

pages.style.display = 'block';

} else {

pages.style.display = 'none';

}

// let html = arr.data.map(item => {

// return `

//

${item.title}

//

${item.price}

//`;

// }).join('');

// list.innerHTML = html;

}

});

//数据渲染函数

function create(arr) {

let html = arr.map((item, index) => {

return `

${item.title}

${item.price}`;

}).join('');

list.innerHTML += html; //数据渲染 后面旧的数据之间拼接在后面

}

}

init();

// 3: 点击加载更多, 就可以加载下一页数据, 拼接到下一页数据下

pages.onclick = () => {

iPage++;

init();

// if (iPage < allpages) { //当前的显示页数的数据自增1,并且初始化

// init();

// } else {

// //达到最后一页,就隐藏隐藏加载更多

// pages.style.display = 'none';

// }

}

})();

query($sql);//

// SELECT * FROM goodlist1 ORDER BY price DESC LIMIT 0,10;//降序

// var_dump($res);//这边测试在api里面测试

//得到结果集里面的内容 num_row //得到数组

$connect =$res->fetch_all(MYSQLI_ASSOC);

//把数据传给前端,先把数据转为字符串

// echo json_encode($connect,JSON_UNESCAPED_UNICODE);//防止中文转意

//查询总条数

$sql2 = "SELECT * FROM goodlist1";

// 执行sql2语句

$res2 = $conn->query($sql2);

// var_dump($res2);

// 一个页面不用出现两个echo,否则前端数据不好处理

$data = array(

"data" => $connect,//这是10条数据

"pages" => $res2->num_rows,//这是总的条数

"page" => $page,//第几页

"num" => $num//每一页的数据条数

);

//把数据传给前端,先把数据转为字符串

echo json_encode($data,JSON_UNESCAPED_UNICODE);//防止中文转意

//最后关闭连接

// $res->close();//关闭结果集

// $conn->close();//关闭数据库

?>

第三种:懒加载-滚动到底部就自动加载下一页

分页效果

loading.gif

JS:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
list分页 import java.util.ArrayList; import java.util.List; import com.jsp.vo.Client; /** * PageBean * * @author apple * */ public class Page { private int currentPage; // 当前页数 private int totalPages; // 总页数 private int pageRows =8; // 每页显示记录数 private int totalRows; // 总数据数 private int specPages; // 指定页数 private int pageStartRow ; // 每页的起始数 private int pageEndRow; // 每页的终止数 private boolean hasNextPage; // 是否有下一页 private boolean hasPreviousPage; // 是否有前一页 private List list; /** * 初始化对象 * * @param tempList * 结果集 * */ public Page(List tempList,int pageRows) { this.list = tempList; this.pageRows = pageRows; this.totalRows = tempList.size(); this.currentPage = 1; // 获取总页数 if ((totalRows % pageRows) == 0) { totalPages = totalRows / pageRows; if(this.totalRows == 0 ){ this.pageRows = 0; } } else { totalPages = totalRows / pageRows + 1; } this.hasPreviousPage = false; // 是否有下一页 if (currentPage == totalPages) { hasNextPage = false; } else { hasNextPage = true; } this.pageStartRow = 0; if (totalRows < pageRows) { this.pageEndRow = totalRows; } else { this.pageEndRow = pageRows; } } /** * 获取当前页的对象集合 * * @return List 对象集合 */ public List getCurrentPageList() { if (currentPage * pageRows < totalRows) { pageEndRow = currentPage * pageRows; pageStartRow = pageEndRow - pageRows; } else { pageEndRow = totalRows; pageStartRow = pageRows * (totalPages - 1); } List pageList = new ArrayList(); for (int i = pageStartRow; i < pageEndRow; i++) { pageList.add(list.get(i)); } return pageList; } /** * 获取上一页的对象集合 * * @return List 对象集合 */ public List getPreviousPage() { currentPage--; if (currentPage = totalPages) { hasNextPage = false; } else { hasNextPage = true; } if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值