【问题标题】:pagination in server side datatable not working (without changing the URL)服务器端数据表中的分页不起作用(不更改 URL)
【发布时间】:2018-10-01 10:42:38
【问题描述】:

我有一个数据表,我的 jquery 如下,

$('#example').DataTable({
    "lengthMenu": [[10,15,20,25,-1], [10,15,20,25,'All']],
    "processing": true,
    "serverSide": true,
    ajax: {
        url: 'url2',
        dataSrc: 'data'
    },
    columns: [
        { data: 'column1' },
        { data: 'column2' },
        { data: 'column3' },
        { data: 'column4' },
        { data: 'column5' },
        { data: 'column6' }
    ]
}); 

这工作正常。唯一的问题是虽然它显示了分页链接,但它们不可点击,并且所有行都显示在第一页本身。

例如。如果有 100 行,则生成的链接为 1-10,但所有 100 条记录都显示在第一页本身上。

我已经推荐了,
https://datatables.net/examples/data_sources/server_side

我在这里做错了什么?
谢谢你的建议

服务器端代码 -

$total_records = $this->model2->getTotal();

$query['results'] = $this->model1->get_Data();


$data = array('data' => $query['results'],
                                "draw" =>  (isset($_REQUEST["draw"]) ? $_REQUEST["draw"] : 0),
                                "recordsTotal" =>  $total_records,
                                "recordsFiltered" => $total_records
                                 );
echo json_encode($data);  

我想我知道我做错了什么, 当我在我的 php 代码中打印 $_GET 时,它是空的。但它应该有限制和偏移值。 如何在 $_GET 中发送限制偏移量?

【问题讨论】:

  • 似乎在开始的请愿书中您返回了所有行。考虑到如果您使用此方法,服务器是否需要返回您要显示的行,并且是告诉数据表插件是否会有更多页面的服务器。所以我在考虑你在服务器端有问题
  • 感谢您的回答。我是否需要包含教程中提到的 ssp.php.class,它将决定返回多少行,或者我必须在查询中应用限制偏移量?你能指导我完成前一个案例吗...我正在使用 codeigniter 框架...再次感谢您
  • 好吧,实际上它对我来说有点复杂,因为我使用 c# 而不是 php 来指导你。在 C# 中,我必须返回一个 JSON,其中包含数据、总元素数、偏移量等。我不知道它在 PHP 上会如何。
  • 好的.. 但我还有一个疑问,如果我不对数据应用任何类型的限制,数据表如何知道将长度为 100 的数据拆分为 10 页,每页包含 10 条记录?因为我也收到一条说“显示 100 条记录中的 1 到 10 条”...
  • 数据表只知道因为服务器的回答。尽管您收到消息“显示 100 条记录中的 1 到 10 条”,但我相信您在页面中看到了超过 10 条记录,不是吗?

标签: javascript php jquery datatable


【解决方案1】:

您需要知道一个页面上有多少条记录,以及有多少条记录。

您的 SQL 将以 OFFSET 30 LIMIT 10 结尾(例如)。

首先获取总记录。页面将通过您的 URL 访问,如果未设置,则默认为第 1 页。

偏移量是这样计算的(例如,第 3 页):

$totalPages = ceil($totalRecords / $numPerPage); // round up the way.
$offset = ($page * $numPerPage) - $numPerPage; // (3 * 10 = 30) - 10 = offset 20

因此,您的 SQL 将使用 OFFSET 20 LIMIT 10 获取记录

【讨论】:

    【解决方案2】:

    这就是你的 server.php 的样子。认为您缺少一些代码行:

      <?php
        $table = 'employees';
        $primaryKey = 'id'; // Table's primary key
    
        $columns = array(
            array( 'db' => 'id', 'dt' => 0 ),
            array( 'db' => 'first_name', 'dt' => 1 ),
            array( 'db' => 'last_name',  'dt' => 2 ),
            array( 'db' => 'position',   'dt' => 3 ),
            array( 'db' => 'date',     'dt' => 4 ),
             array( 'db' => 'updated',     'dt' => 5 ),
        );
    
        $sql_details = array(
            'user' => 'username',
            'pass' => 'password',
            'db'   => 'database',
            'host' => 'localhost'
        );
    
        require( 'ssp.class.php' );
    
        echo json_encode(
            SSP::simple( $_POST, $sql_details, $table, $primaryKey, $columns )
        );
        ?>
    

    最终结果:https://databasetable-net.000webhostapp.com/

    这应该会让你朝着正确的方向前进。认为 ssp.class.php 文件可能也需要添加,不确定您是否拥有它(您可以在 github 上找到它)。希望这可以帮助!

    【讨论】:

    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多