【问题标题】:Jquery DataTable serverside rendering and pagination error in front end前端中的Jquery DataTable服务器端渲染和分页错误
【发布时间】:2017-07-25 11:36:07
【问题描述】:

我正在使用php 和这个查询select * from table 以及我想在服务器端处理中显示在jquery datatable 中的结果意味着我想使用jquery datatable 自己的ajax方法。我总共有 58 行。所以默认情况下我应该有 6 页。每页 10 行。数据即将到来,并显示在表格中。但分页错误。

实际上它在第一页显示了所有 58 行,还显示了 6 个分页按钮。如果我点击任何东西都不起作用。搜索和排序不起作用。

我没有在此处粘贴sql 代码,而是在此处粘贴php 的程序代码。

php代码:

require_once("logic/LogsDataLogic.php");

$ldl = new LogsDataLogic();
$data = $ldl->getDataByFromDateToDate();

$arr = [
    "draw" => $_POST["draw"],
    "recordsTotal" => count($data),
    "recordsFiltered" => count($data),
    "data" => $data
];

echo json_encode($arr);

jquery代码:

$(document).ready(function(){               
            $('#logs_table').DataTable( {
                "processing": true,
                "serverSide": true,
                ajax: {
                    url: '../app/getData.php',
                    type: "POST"
                }
            } );
    });

html代码:

<link href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css" type="text/css" rel="stylesheet">
</head>
<body>

                                <table class="display" cellspacing="0" width="100%" id="logs_table">
                                    <thead>
                                        <tr>
                                            <th>ID</th>
                                            <th>User ID</th>
                                            <th>Login Time</th>
                                            <th>IP</th>
                                        </tr>
                                    </thead>
                                    <tfoot>
                                        <tr>
                                            <th>ID</th>
                                            <th>User ID</th>
                                            <th>Login Time</th>
                                            <th>IP</th>
                                        </tr>
                                    </tfoot>
                                </table>
<!-- end here -->
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>

我附上了最终结果的图片。Table Image here

【问题讨论】:

  • 我认为您错过了导致数据表无法正常工作的表结构..请检查控制台..可能对您有所帮助..
  • 我在这里添加了所有内容。您可以看到,但控制台中没有错误

标签: php jquery datatables


【解决方案1】:

解决方案 1:

如果您不想从服务器分页,只需设置 "serverSide": false, 这将一次性带来所有记录,即 58,但分页将起作用。

解决方案 2:

如果你想从服务器端分页意味着每次只获取 10 条记录,请按照以下步骤操作

您已添加“serverSide”:true,因此当您查看控制台以及其他参数时传递了一些其他参数。 您需要在服务器端查询中处理 limit 20,10

参考:https://datatables.net/examples/server_side/simple.html

例如:

draw:4
columns[0][data]:0
start:20
length:10
search[value]:
search[regex]:false

说明:

当你将 serverSide 设置为 false 时

datatable 从服务器获取所有记录(在您的情况下为 58)并按照建议在 UI 中分页(每页 10 个记录) 因此,当您更改页面时,不会触发 ajax 调用

当你将 serverSide 设置为 true 时

Datable 仅获取前 10 条记录,当您更改页面时,将触发 ajax 调用以获取另一组 10 条记录。 Datatable 随请求添加了一些参数,并希望您在服务器端处理这些参数 例如:第一条记录和每组记录总数和可用记录总数

SO对于每个请求的开始和长度都被传递以获取来自哪个索引的记录

作为响应数据期望 "draw":2,"recordsTotal":57,"recordsFiltered":57 连同数据

draw 是一个唯一键,您可以从请求中使用它 recordsTotal 没有记录:为此,您需要额外的查询来获取所有记录的计数

有关现场演示和示例代码的更多详细信息,请参阅this post

【讨论】:

  • 让我想获取从 11 到 20 的行。然后在 sql 中我应该写“从表限制 11,10 中选择 *”。现在的问题是如何获得用于分页的 totalnoofRows?我会使用两个查询吗?在第一个查询 totalnoofRows 和第二行限制中
  • 要获得 totalRecords 您需要对数据集进行计数在进行分页之前,有点像您的count($data)
  • 我的整个数据集大小是 58,但是当我加载第一页时意味着 0 到 10,那么我的数据集大小是 10,那么我将如何获得 58?第二个查询还是什么?
  • 我想要 sol 2 那我该怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多