jquery DataTable实现前后台动态分页

下面是jquery DataTable实现前后台动态分页的攻略。

1. DataTable介绍

jQuery DataTable是一个功能强大的插件,它能够将静态的HTML表格转换成功能丰富、交互性强大并且具备搜索、排序和分页功能的表格。它是一个集成了全部必要功能的插件,还具有较高的扩展性,可以轻松地应对不同需求。

2. jQuery DataTable动态分页的实现

数据量较大时,一定要使用后台分页。使用 DataTable 实现后台分页,需要前端发送分页请求到后端,通过后端获取数据之后,把数据以 JSON 格式返回到前端,并根据后端返回的数据的数量来计算出分页数量,从而实现前端分页。以下是前后台动态分页实现的步骤:

2.1 前端配置

  1. 引入 jQuery 和 DataTable 的相关文件:
<!--引入jQuery-->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!--引入datatables的css文件-->
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/datatables/1.10.21/css/jquery.dataTables.min.css">
<!--引入datatables的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/datatables/1.10.21/js/jquery.dataTables.min.js"></script>
  1. 创建表格
<table id="table_id">
    <thead>
        <tr>
            <th>列1</th>
            <th>列2</th>
            .
            .
            .
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>
  1. 设置DataTable属性
$(document).ready( function () {
    var table = $('#table_id').DataTable({
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "后台接口地址",
            "type": "POST",
            "data": function(d) {
                d.start = d.start || 0;
                d.limit = d.length || 10;
                return d;
            },
            "dataType": "json"
        },
        "columns": [
            { "data": "列名" },
            { "data": "列名" },
            .
            .
            .
        ]
    });
});

该属性配置了:

  • processing:是否开启加载提示
  • serverSide:是否开启服务端分页
  • ajax:获取数据的接口地址
  • data:向后端发送的数据
  • columns:列配置

2.2 后端实现

针对 DataTable 发送的延迟加载请求进行响应,将分页数据以 json 格式返回到前端。需要注意的是,接口返回的数据需要包含以下的 key 值:

  • recordsTotal:总数据条数
  • recordsFiltered:过滤后的数据条数
  • draw:请求序号,原样返回

以下是具体实现的示例代码:

router.post('/data', async function(ctx, next) {
    const { start, limit } = ctx.request.body
    const currentPage = start / limit + 1
    const data = await getData(currentPage, limit)
    const totalCount = await getTotalCount()
    ctx.body = {
      draw: ctx.request.body.draw || 1,
      recordsTotal: totalCount,
      recordsFiltered: totalCount,
      data,
    }
})

在该代码中,getData() 方法是用于获取分页数据的方法,getTotalCount() 方法是用于获取数据总条数的方法,ctx.request.body 则是从前端获取的数据。

2.3 总结

至此,jQuery DataTable前后台动态分页的实现就完成了。前端在需要分页的时候,会从后端获取数据,然后通过 DataTable 显示到表格中,可以在 DataTable 中自主切换页码。

3. 示例说明

以下两个示例对数据进行了模拟,演示了前后台分页实现效果。

3.1 示例1

假设有如下的服务器端数据:

[
    {
        "name": "张三",
        "age": 25,
        "gender": "男"
    },
    {
        "name": "李四",
        "age": 30,
        "gender": "女"
    },
    {
        "name": "王五",
        "age": 28,
        "gender": "男"
    },
    {
        "name": "赵六",
        "age": 24,
        "gender": "女"
    },
    {
        "name": "陈七",
        "age": 26,
        "gender": "男"
    },
    {
        "name": "高八",
        "age": 29,
        "gender": "女"
    }
]

在前端页面设置如下的 DataTable 配置:

$('#example').DataTable({
    "processing": true,
    "serverSide": true,
    "ajax": {
        "url": "/api/getData",
        "type": "POST",
        "data": function(d) {
            d.start = d.start || 0;
            d.limit = d.length || 10;
            return d;
        },
        "dataType": "json"
    },
    "columns": [
        { "data": "name" },
        { "data": "age" },
        { "data": "gender" }
    ]
});

在请求 /api/getData 接口时,后台会返回第 1 页的数据,而 DataTable 插件会自动地在表格底部生成分页按钮,供用户切换分页显示。

3.2 示例2

在这个示例中,我们假设后台只返回 50 条假数据,前端每次从服务器请求 10 条,前端的代码如下:

$('#example').DataTable({
    "processing": true,
    "serverSide": true,
    "ajax": {
        "url": "/api/getData",
        "type": "POST",
        "data": function(d) {
            d.start = d.start || 0;
            d.limit = d.length || 10;
            return d;
        },
        "dataType": "json"
    },
    "columns": [
        { "data": "id" },
        { "data": "name" },
        { "data": "city" }
    ],
    "language": {
        "lengthMenu": "每页显示 _MENU_ 条记录",
        "zeroRecords": "没有匹配的结果",
        "info": "第 _PAGE_ 页,共 _PAGES_ 页,共 _TOTAL_ 条记录",
        "infoEmpty": "没有记录",
        "infoFiltered": "(从 _MAX_ 条记录中过滤)",
        "oPaginate": {
            "sFirst": "第一页",
            "sLast": "最后一页",
            "sNext": "下一页",
            "sPrevious": "上一页"
        }
    }
});

在请求 api/getData 接口时,依然会返回第 1 页的数据,但是前端会自动选取每页显示 10 条数据,并且在底部显示 Total:50 和 Pages:5 信息。用户可以点击底部的分页按钮切换,DataTable 插件依据用户的操作,请求相应的页数据显示。

至此,本文介绍了 JQuery DataTable 实现前后台动态分页的完整攻略,以及具体的示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery DataTable实现前后台动态分页 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 关于jquery中全局函数each使用介绍

    关于jquery中全局函数each的使用介绍可以分为以下几个部分: 1. each函数的语法 jquery中的each函数用来遍历数组或对象,其语法如下: $.each( object, callback ) 其中,object可以是一个数组或者一个对象,callback是回调函数,用来处理遍历到的每一个元素。 2. each函数的回调函数 each函数的回…

    jquery 2023年5月27日
    00
  • jquery form表单序列化为对象的示例代码

    下面是关于 jQuery form表单序列化为对象 的完整攻略: 什么是jQuery form表单序列化为对象 首先说明下,什么是jQuery form表单序列化为对象,它是指将 HTML 表单元素的值编码成具有键值对的字符串,同时也可以方便地将表单元素的值转换成 JSON 对象,以便于提交表单数据或者进行其他用途。 jQuery form表单序列化为对象的…

    jquery 2023年5月27日
    00
  • 如何在jQuery.each()函数中跳到下一个迭代

    在 jQuery 的 each() 函数中想要跳到下一个迭代,一般情况下可以使用 continue 关键字来实现。关于如何在 jQuery.each() 函数中跳到下一个迭代,可以按照以下步骤操作: 在 each() 函数中通过回调函数来执行需要循环的代码 $.each(array, function(index, value) { // 待执行的代码 })…

    jquery 2023年5月12日
    00
  • jQuery点击按钮弹出遮罩层且内容居中特效

    关于“jQuery点击按钮弹出遮罩层且内容居中特效”的攻略,我将从以下几个方面进行详细讲解: 引入jQuery和CSS文件 创建HTML结构 编写CSS样式 编写jQuery代码 下面我将一步步详细展开说明。 1. 引入jQuery和CSS文件 首先,我们需要在HTML页面中引入jQuery库和CSS样式文件,CSS文件包含了遮罩层和弹窗的样式定义,代码如下…

    jquery 2023年5月27日
    00
  • jQWidgets jqxSortable停止事件

    “jQWidgets jqxSortable停止事件”指的是在使用jQWidgets库中的jqxSortable组件时,当停止拖动某个元素时,会触发该元素的停止事件。接下来,我将为您提供完整的攻略。 jqxSortable组件简介 jqxSortable组件是jQWidgets库中一个用于制作可排序元素列表的插件。它支持拖拽和排序功能,并且提供了许多配置选项…

    jquery 2023年5月11日
    00
  • jQuery中siblings()方法用法实例

    让我来为你详细讲解“jQuery中siblings()方法用法实例”的完整攻略。 什么是siblings()方法 jQuery中的siblings()方法可以获取一个元素的兄弟元素,即与该元素相邻的所有同级元素。该方法有两种形式: $(selector).siblings() $(selector).siblings(filter) 第一个形式表示获取该元素…

    jquery 2023年5月28日
    00
  • jQWidgets jqxBarcode export()方法

    jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具,包括表格、图表、表单、日历、菜单等。其中,jqxBarcode是jQWidgets中的一个条形码组件,可以用于生成各种类型的条形码。jqxBarcode提供了export()方法,可以将条形码导出为图片或PDF格式。本文将详细介绍jqxBarcode的export()方法的使用…

    jquery 2023年5月9日
    00
  • jQWidgets jqxDropDownButton宽度属性

    jQWidgets jqxDropDownButton宽度属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDown是Widgets组件于实现下拉按钮的组件。本文将详细介绍jqxDropDownButton的宽度属性,包括作用、语法和示例。 jqxDropDownButton宽度属性的基本语法 jqxD…

    jquery 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部