Bootstrap Table 后端分页
- 2019 年 10 月 11 日
- 筆記
之前一直用的前端分页,在数据不是太多的情况下,前端分页还是很方便的,也可以使用自带的搜索等功能,如果数据量比较多的情况就要使用后端分页。
实现的原理:前端把offset和limit(每一页显示的数量)发送给后端,后端查询数据库 返回JSON,前端根据后端返回的total展示出pagination。
返回的JSON格式
{ "total": 25, "rows": [ {}, {}, ... ] }
前端主要设置
sidePagination: "server", pageNumber: 1, queryParams:queryParams,
queryParams是一个函数,
function queryParams(params) { console.log(JSON.stringify(params)) // {"order":"asc","offset":0,"limit":10} return { offset:params.offset, limit:params.limit } }
完整的代码
<table class="table-striped table-hasthead" id="tableTest1"> <thead> <tr> <th data-sortable="true" data-field="id">Id</th> <th data-field="name">Name</th> <th data-sortable="true" data-field="url">Website</th> <th data-field="alex">Texa</th> <th data-field="country">Country</th> </tr> </thead> </table>
$(function() { var url = "selectBtTable.php?action=init_data_list"; $('#tableTest1').bootstrapTable({ height: $(window).height() - 460, url: url, method: 'POST', //默认是GET方式请求 contentType: "application/x-www-form-urlencoded", search: true, pagination: true, sidePagination: "server", pageNumber: 1, queryParams: queryParams, }); });
使用GET请求会把参数放在URL中发送给后端 selectBtTable.php?action=init_data_list&offset=0&limit=10
如果是POST请求 一定要加上contentType: "application/x-www-form-urlencoded"
后端PHP 简单代码
<?php $action = $_GET['action']; //var_dump($action); switch ($action) { case 'init_data_list': init_data_list(); break; case 'data_list': data_list(); break; case 'del_row': del_row(); break; case 'edit_row': edit_row(); break; } function init_data_list() { $offset = $_POST['offset']; //$offset = intval($offset); 可以不用转换 $limit = $_POST['limit']; //var_dump($offset); //$sql = "SELECT * FROM website"; select * from clerk limit {$sql},{$pagesize} $sql = "SELECT * FROM website limit {$offset},{$limit}"; // SELECT * FROM products LIMIT 0,8; // SELECT * FROM products LIMIT 8 OFFSET 0; (在mysql 5以后支持这种写法) $query = query_sql($sql); while ($row = $query->fetch_assoc()) { $data[] = $row; } $sql = "SELECT * FROM website"; $query=query_sql($sql); $total=mysqli_num_rows($query); $result["total"] = $total; // count($data); $result["rows"] = $data; //$result["rows"] = array_slice($data, $offset, $limit); echo json_encode($result); } function query_sql() { $mysqli = new mysqli("127.0.0.1", "root", "123", "demodb"); $sqls = func_get_args(); foreach ($sqls as $s) { $query = $mysqli->query($s); } $mysqli->close(); return $query; } ?>
(adsbygoogle = window.adsbygoogle || []).push({});