datatables插件真正实现前后台交互

使用datatables如果没后端的事还好说,前端一次性获取全部数据进行分页,没什么麻烦,但是要后台分页返回数据,加上前端、后端也不是很懂datatables插件的话,就有可能出现以下对话,前端对后端说:“我要传什么给你?”,后端对前端说:“我要接收什么?我要返回什么给你?”

没办法,自己找的datatables插件,只能先自己解决才能要求后端了

 

最终效果有点丑,但功能实现了。。。

 

 

 

我采用的是nodejs+mysql做api接口


mysql数据库
数据库名:data_table
表名:test
 

 


nodejs后端代码

const Koa = require('koa');
const cors = require('koa2-cors');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
const mysql = require('mysql');
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'data_table'
});

try {
    connection.connect();
    console.log("连接成功")
} catch (err) {
    throw (err)
}


const app = new Koa();

app.use(cors());
app.use(bodyParser());

let router = new Router();

let query = function () {

    return new Promise((resolve, reject) => {
        connection.query('SELECT * FROM  test', function (error, results) {
            if (error) {
                reject(error)
            } else {
                resolve(results)
            };

        });
    })
}


router.get('/test', async (ctx, next) => {
    let sEcho = ctx.query.sEcho 前端传的
    let iDisplayStart = Number(ctx.query.iDisplayStart) //前端传的
    let iDisplayLength = ctx.query.iDisplayLength //前端传的
    let currentPage = Math.ceil(iDisplayStart / iDisplayLength) + 1 //当前页码
    let rows = await query()
    let total = rows.length //总数据量
    let pageNum = Math.ceil(total / iDisplayLength) //分页数
    let rowsName = rows.slice(iDisplayStart, iDisplayLength * currentPage) //分页后显示当前数据
    ctx.body = {
        status: 1,
        aData: rowsName, //前端如果接收的是aData,必须返回aData
        iTotalRecords: pageNum, //必须返回iTotalRecords
        iTotalDisplayRecords: total, //必须返回iTotalDisplayRecords
        sEcho: sEcho //原路返回,必须返回sEcho
    }
})


app
    .use(router.routes())
    .use(router.allowedMethods());




app.listen(3000);

前端代码

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="renderer" content="webkit|ie-comp|ie-stand">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta http-equiv="Cache-Control" content="no-siteapp" />
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css">
  <script type="text/javascript" language="javascript" src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script>
  <script type="text/javascript" language="javascript"
    src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>
  <title>test</title>
</head>

<body>
  <div class="margin clearfix">
    <div class="cover_style" id="cover_style">
      <div class="">
        <table class="table table-striped table-bordered table-hover" id="example">
          <thead>
            <tr>
              <th width="">ID</th>
              <th width="">用户名</th>
            </tr>
          </thead>
          <tbody>

          </tbody>
        </table>
      </div>

    </div>
  </div>
</body>

</html>

<script type="text/javascript">
jQuery(function($) { 
 
 //初始化table 
 var oTable1 = $('#example') 
     .dataTable( 
         { 
           "bScrollCollapse" : true, //当显示的数据不足以支撑表格的默认的高度 
           "sPaginationType": "full_numbers",      //翻页界面类型  
           "bDestroy" : true, 
           "bServerSide" : true,//服务器处理分页,默认是false,需要服务器处理,必须true 
           "sAjaxDataProp" : "aData",//是服务器分页的标志,必须有  
           "sAjaxSource" : "http://localhost:3000/test",//通过ajax实现分页的url路径。  
           "aoColumns" : [//初始化要显示的列 
               { 
                 "data" : "id"
               }, 
               { 
                 "data" : "name" 
               } ],
               "oLanguage": {  //汉化   
                    "sLengthMenu": "每页显示 _MENU_ 条记录",   
                    "sZeroRecords": "没有检索到数据",   
                    "sInfo": "当前数据为从第 _START_ 到第 _END_ 条数据;总共有 _TOTAL_ 条记录",   
                    "sInfoEmtpy": "没有数据",   
                    "sProcessing": "正在加载数据...",   
                    "oPaginate": {   
                        "sFirst": "首页",   
                        "sPrevious": "前页",   
                        "sNext": "后页",   
                        "sLast": "尾页"  
                    }   
                }   
         }); 
}); 
 
</script>

大功告成,基本功能就实现了
终于可以跟后端说:“要接收的是sEcho、iDisplayStart、iDisplayLength,返回的要aData、iTotalRecords、iTotalDisplayRecords、sEcho”

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataTables是一个强大的jQuery表格插件,它可以快速地将HTML表格转换成可排序、可搜索、可分页的数据表格。下面是DataTables插件的使用步骤: 1. 引入必要的文件 首先需要在HTML文件中引入jQuery和DataTables的相关文件。例如: ``` <!-- 引入 jQuery --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- 引入 DataTables --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.css"> <script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js"></script> ``` 2. 创建HTML表格 在HTML文件中创建一个普通的表格,例如: ``` <table id="example"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Tom</td> <td>25</td> </tr> <tr> <td>2</td> <td>Jerry</td> <td>28</td> </tr> <tr> <td>3</td> <td>Mary</td> <td>30</td> </tr> </tbody> </table> ``` 3. 初始化DataTables 使用jQuery的`DataTable()`函数初始化表格,例如: ``` $(document).ready(function() { $('#example').DataTable(); }); ``` 这样就可以将表格转换为可排序、可搜索、可分页的数据表格了。 还可以通过配置参数来定制表格的样式、功能等。例如: ``` $(document).ready(function() { $('#example').DataTable({ "paging": false, // 禁用分页 "searching": false, // 禁用搜索 "ordering": false, // 禁用排序 "info": false // 禁用信息显示 }); }); ``` 以上就是DataTables插件的使用步骤,希望可以帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值