JS分页的实现(同步与异步)

yizhihongxing

JS分页的实现有同步和异步两种方式。在介绍这两种方式之前,需要了解下分页所需的一些数据和参数:

  1. 当前页码 currentPage
  2. 每页展示数据条数 pageSize
  3. 总数据量 totalDataCount
  4. 总页数 pageCount

其中,总页数pageCount可根据总数据量totalDataCount和每页展示条数pageSize相除得到。接下来我们分别介绍同步和异步两种方式的实现。

同步方式

同步方式指的是在页面加载时,将所有数据一次性加载出来,利用JS进行数据的筛选展示、分页切换等操作。对于数据量较小的项目来说,同步方式实现起来比较简单,例如:

 // 定义数据数组
 var data = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"];

 // 配置分页参数
 var currentPage = 1;
 var pageSize = 5;
 var totalDataCount = data.length;
 var pageCount = Math.ceil(totalDataCount / pageSize);

 // 定义分页显示函数
 function showData(currentPage) {
   // 清空容器内容
   document.getElementById("container").innerHTML = "";
   // 根据当前页码和每页展示数据条数,筛选出要显示的数据
   var dataStartIndex = (currentPage - 1) * pageSize;
   var dataEndIndex = dataStartIndex + pageSize > totalDataCount ? totalDataCount : dataStartIndex + pageSize;
   var showDataList = data.slice(dataStartIndex, dataEndIndex);
   // 将数据展示在页面上
   showDataList.forEach(function(item) {
     var div = document.createElement("div");
     div.innerHTML = item;
     document.getElementById("container").appendChild(div);
   })

   // 根据总数据量和当前页码生成分页栏
   var pageNav = "";
   for (var i = 1; i <= pageCount; i++) {
     if (i === currentPage) {
       pageNav += "<span class='current-page'>" + i + "</span>";
     } else {
       pageNav += "<a href='javascript:void(0)' onclick='showData(" + i + ")'>" + i + "</a>";
     }
   }
   document.getElementById("page-nav").innerHTML = pageNav;
 }

 // 页面加载时,显示第一页的数据
 showData(currentPage);

在以上示例中,我们实现了一个简单的同步分页效果。通过计算展示数据的起始位置和总页数,使用for循环生成了一个分页栏,点击分页栏,则根据不同页码重新筛选展示的数据。

异步方式

异步方式指的是在页面加载完成后,仅仅加载第一页的数据,然后根据用户的点击动作进行AJAX请求获取分页所需的数据,再进行数据展示。以下是一个异步分页的示例:

 // 配置分页参数
 var currentPage = 1;
 var pageSize = 5;
 var totalDataCount = 0;
 var pageCount = 0;

 // 定义分页显示函数
 function showData(currentPage) {
   var xhr = new XMLHttpRequest();
   xhr.open("GET", "/api/data?page=" + currentPage + "&pageSize=" + pageSize, true);
   xhr.onreadystatechange = function() {
     if (xhr.readyState === 4) {
       if (xhr.status === 200) {
         var data = JSON.parse(xhr.responseText);
         totalDataCount = data.totalDataCount;
         pageCount = Math.ceil(totalDataCount / pageSize);
         // 清空容器内容
         document.getElementById("container").innerHTML = "";
         // 将数据展示在页面上
         data.dataList.forEach(function(item) {
           var div = document.createElement("div");
           div.innerHTML = item;
           document.getElementById("container").appendChild(div);
         })

         // 根据总数据量和当前页码生成分页栏
         var pageNav = "";
         for (var i = 1; i <= pageCount; i++) {
           if (i === currentPage) {
             pageNav += "<span class='current-page'>" + i + "</span>";
           } else {
             pageNav += "<a href='javascript:void(0)' onclick='showData(" + i + ")'>" + i + "</a>";
           }
         }
         document.getElementById("page-nav").innerHTML = pageNav;
       } else {
         alert("数据加载失败!");
       }
     }
   };
   xhr.send(null);
 }

 // 页面加载时,显示第一页的数据
 showData(currentPage);

在以上示例中,实现了动态加载数据的功能,当用户点击不同的分页时,会进行异步请求获取对应的数据,并进行展示。可以看到,在展示和分页栏的生成过程中,我们都参考了同步分页的实现方式,只不过数据加载的方式不同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS分页的实现(同步与异步) - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Java日常练习题,每天进步一点点(16)

    让我来为你详细讲解“Java日常练习题,每天进步一点点(16)”的完整攻略吧。 首先,这个练习题是一道比较典型的算法练习题,旨在让练习者熟悉并掌握常见的算法思想以及数据结构基本操作。下面我们将对这个练习题进行分析。 题目描述 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 示例说明 例如,输入s=”rabbbit”,t=”r…

    Java 2023年5月19日
    00
  • spring boot使用@Async注解解决异步多线程入库的问题

    下面我来详细讲解 spring boot 使用 @Async 注解解决异步多线程入库的问题的完整攻略。 什么是 @Async 注解? @Async 注解是 Spring Boot 中用于实现异步调用的注解,使用 @Async 注解可以很轻松地将任务提交到 Spring 的线程池中,并利用多线程技术来提高处理能力。 如何实现异步多线程入库? 我们可以通过使用 …

    Java 2023年5月26日
    00
  • Mybatis中 SQL语句复用

    Mybatis作为一款主流的ORM框架,可以有效地简化数据库操作。SQL语句的编写是Mybatis中的重要环节,而SQL语句复用则是其中重要的一块。本文将为您详细讲解Mybatis中SQL语句复用的完整攻略。 1. 基本概念 Mybatis支持多种方式实现SQL语句复用,其中最常用的方式是使用组合SQL。组合SQL即通过组合多个SQL语句实现复杂查询的效果。…

    Java 2023年5月20日
    00
  • Java输入/输出流体系详解

    Java输入/输出流体系详解 引言 Java的输入/输出流是Java程序中使用频率很高的部分,从文件IO到网络IO,从字节流到字符流,从节点流到处理流,Java的IO体系都非常的强大和灵活。许多初学者在学习Java IO时经常会对Java IO体系的各个部分感到困惑和无从下手。本篇攻略就是希望能够帮助读者理解Java IO体系的各个方面,掌握Java输入/输…

    Java 2023年5月26日
    00
  • Spring Boot集成MyBatis的方法

    下面是“Spring Boot集成MyBatis的方法”的完整攻略,包括两条示例。 1. 环境准备 在开始之前,需要准备以下环境:- Java JDK 1.8.x- Maven 3.x- IntelliJ IDEA 或 Eclipse 2. 新建Spring Boot项目 可以使用Spring Initializr快速创建一个Spring Boot 项目。指…

    Java 2023年5月20日
    00
  • Java中String类(字符串操作)的10个常见问题和解决方法

    Java中String类的10个常见问题和解决方法 在Java中,String类是非常常见的引用类型,用于表示字符串。然而,由于String类的一些特性,我们在使用String类时可能会遇到一些问题。在本篇文章中,我们将讨论Java中String类的10个常见问题和解决方法。 1. 字符串比较 在Java中比较两个字符串应该使用equals()方法而不是’=…

    Java 2023年5月26日
    00
  • spring security中的csrf防御原理(跨域请求伪造)

    Spring Security 中的 CSRF(Cross-Site Request Forgery)攻击防御是非常重要的安全机制。在这个攻防机制中,Spring Security 通过在表单中添加或者 TkCooikeToken 的形式防御 CSRF 攻击,保障 Web 应用程序的安全。 CSRF 防御机制 CSRF 攻击利用用户在 Web 浏览器中处于登…

    Java 2023年5月20日
    00
  • Spring基于注解整合Redis完整实例

    Spring基于注解整合Redis完整实例 简介 Redis是一款高性能的key-value存储系统,很多项目中都会使用到它来进行缓存,加速数据的读写速度。在Spring项目中,我们可以使用注解来方便地使用Redis,这篇文章将介绍如何使用注解整合Redis。 步骤 1. 引入依赖 首先需要在项目的pom.xml文件中引入Spring和Redis相关的依赖。…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部