我正在使用datatables和jQuery。
我使用Web服务的结果填充表格。此Web服务需要在关联查询中包含LIMIT子句,因为页面需要很长时间才能加载。
所以我的目标是在我的webservice调用中使用页码:
如果我点击第2页,我将发布20,40到极限,如果我点击第3页,我将发布30,50。
所以基本上它将是:
page number clicked * 10
对于起始范围和
page number clicked * 10 + 20
对于LIMIT条款的完成范围。
然而,显示的页面编号是基于结果的数量,如果我发布我的网络服务的LIMIT为0,20那么只有20个结果,我桌子底部的页码显然不会有2个,3,4等作为选项,最初只返回20行。
有什么方法吗?
有没有更好的方法来实现我想要实现的目标?
一些代码:
$(document).ready(function()
{
tableAllocation('<?php echo $_SESSION['AuthCode']?>');
$('#table_id').dataTable( {
"pageLength" : "20",
"order": [[ 0, "asc" ],[1, "asc"]]
});
});
表分配是一个js函数,它调用webservice并解析响应以填充我的数据表
答案 0 :(得分:1)
有一个易于实施的现成解决方案。它处理诸如LIMIT
,订购,分页等开箱即用的小事。以下是mySQL,为long range of databases and architectures制作了类似的解决方案。
1 )转到https://legacy.datatables.net/examples/data_sources/server_side.html并将“服务器端(PHP)代码”复制到文件中,您可以将其称为datatables.php
2 )编辑datatables.php
凭据:
$gaSql['user'] = "user";
$gaSql['password'] = "password";
$gaSql['db'] = "database";
$gaSql['server'] = "localhost";
3 )配置datatables.php
表格和列设置:
表名
$sTable = "database table";
要显示哪些列
$aColumns = array( 'column1', 'column2' ... );
指定索引列,这很重要!
$sIndexColumn = "index column";
索引列不必包含在$aColumns
。
4 )构建标记
<table id="example">
<thead>
<tr>
<th>column1</th>
<th>column2</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
5 )使用datatables.php
将数据表创建为服务器端驱动的数据表:
$('#example').dataTable({
bProcessing: true,
bServerSide: true,
sAjaxSource: "datatables.php"
});
上述解决方案适用于1.9.x和1.10.x dataTables版本/分支。