Datatables JSON 服务器
最后修改于 2020 年 7 月 13 日
Datatables JSON 服务器教程演示了如何在 Datatables 组件中显示来自 JSON 服务器的数据。在本教程中,我们使用 Gulp 4 来管理文件。
Datatables
DataTables 是一个 jQuery 插件,用于创建动态 HTML 数据表。它支持分页、排序或搜索等许多功能。
JSON 服务器
json-server
是一个用于创建测试 REST API 的 JavaScript 库。
Datatables 示例
首先,我们使用 faker 生成一些测试数据。
$ mkdir datatables-example $ cd datatables-example
我们创建项目目录并进入该目录。
$ mkdir -p src/js
我们创建 src
和 src/js
目录。这些目录将存放开发文件。分发文件将位于 build
目录中。构建过程由 Gulp 管理。
我们创建项目目录并进入该目录。
$ npm init $ npm i -g json-server
我们初始化一个 Node 项目并安装 json-server
。
$ npm i faker fs datatables jquery
我们安装四个依赖项。faker
和 fs
模块用于生成测试数据。datatables
和 jquery
是项目依赖项。
$ npm i -g gulp $ npm i --save-dev gulp-minify
我们安装两个开发依赖项:gulp
和 gulp-minify
;我们使用它们来构建项目。您可能还需要调用 npm link gulp
来创建与全局 gulp
模块的本地链接。
{ "name": "datatables-jsonserver", "version": "1.0.0", "description": "jQuery Datatable with JSON Server example", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Jan Bodnar", "license": "ISC", "devDependencies": { "gulp-minify": "^3.1.0" }, "dependencies": { "datatables": "^1.10.18", "faker": "^4.1.0", "fs": "0.0.1-security", "jquery": "^3.3.1" } }
这是我们的 package.json
文件。
const faker = require('faker') const fs = require('fs') function generateUsers() { let users = [] for (let id=1; id <= 100; id++) { let firstName = faker.name.firstName() let lastName = faker.name.lastName() let email = faker.internet.email() users.push({ "id": id, "first_name": firstName, "last_name": lastName, "email": email }) } return { "data": users } } let dataObj = generateUsers(); fs.writeFileSync('data.json', JSON.stringify(dataObj, null, '\t'));
使用 faker
,我们生成一百个具有 id、名字、姓氏和电子邮件属性的用户。数据被写入 data.json
文件。该文件由 json-server
使用。
$ tree . ├── data.json ├── generate-fake-users.js ├── gulpfile.js ├── package.json ├── package-lock.json └── src ├── index.html └── js └── main.js
这是在安装 node 模块之前的项目结构。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home page</title> <link rel="stylesheet" type="text/css" href="css/jquery.dataTables.min.css"> </head> <body> <table id="mytable" class="display"> </table> <script src="js/jquery.slim.min.js"></script> <script src="js/jquery.dataTables.min.js"></script> <script src="js/main-min.js"></script> </body> </html>
数据将显示在 table
标签中。
setUpDataTable(); async function setUpDataTable() { const res = await fetch('https://:3004/data'); const data = await res.json(); var users = data.map(el => Object.values(el)); $(document).ready( () => { $('#mytable').DataTable( { data: users, columns : [ { title: "Id" }, { title: "First name" }, { title: "Last name" }, { title: "Email" }, ] }); }); }
在 main.js
中,我们设置数据表。
const res = await fetch('https://:3004/data'); const data = await res.json();
我们从 JSON 服务器获取数据。使用 await
,我们可以等待 Promise 完成。
var users = data.map(el => Object.values(el));
返回的数据是 JSON 对象数组的形式。我们将其转换为 Datatables 理解的 JavaScript 数组的数组格式。
$(document).ready( () => { $('#mytable').DataTable( { data: users, columns : [ { title: "Id" }, { title: "First name" }, { title: "Last name" }, { title: "Email" }, ] }); });
我们初始化 DataTable
组件。我们添加数据并指定列名。
const gulp = require("gulp"); const minify = require("gulp-minify"); gulp.task('copyHtml', () => { return gulp.src('src/index.html') .pipe(gulp.dest('build')) }) gulp.task('copyJS', () => { return gulp.src(['node_modules/datatables/media/js/jquery.dataTables.min.js', 'node_modules/jquery/dist/jquery.slim.min.js']) .pipe(gulp.dest('build/js')) }) gulp.task('copyCSS', () => { return gulp.src('node_modules/datatables/media/css/jquery.dataTables.min.css') .pipe(gulp.dest('build/css')) }) gulp.task('minify', () => { return gulp.src('src/js/main.js') .pipe(minify({noSource: true})) .pipe(gulp.dest('build/js')) }) gulp.task('default', gulp.series([ 'copyHtml', 'minify', 'copyJS', 'copyCSS']));
这是 gulpfile.js
。该文件包含管理我们应用程序的 Gulp 任务。在我们的例子中,它复制项目数据并压缩 main.js
文件。
$ gulp [15:57:51] Using gulpfile ~/tmp/datatable-jsonserver/gulpfile.js [15:57:51] Starting 'copyHtml'... [15:57:51] Starting 'minify'... [15:57:51] Starting 'copyJS'... [15:57:51] Starting 'copyCSS'... [15:57:51] Finished 'minify' after 168 ms [15:57:51] Finished 'copyHtml' after 185 ms [15:57:51] Finished 'copyCSS' after 161 ms [15:57:51] Finished 'copyJS' after 167 ms [15:57:51] Starting 'default'... [15:57:51] Finished 'default' after 47 μs
我们构建项目。文件现在位于 build
目录中。
$ json-server --watch data.json --port 3004
我们启动 JSON 服务器。
$ firefox build/index.html
我们启动主页。

在本教程中,我们展示了如何在 jQuery DataTable 组件中显示来自 JSON 服务器的数据。项目由 Gulp 管理。