【问题标题】:datatables.net column sorts another columndatatables.net 列对另一列进行排序
【发布时间】:2018-07-04 17:15:03
【问题描述】:

我仍然在这个问题上深陷困境。 我使用 datatable.net 来显示我的数据库 (mySql) 中的一些数据。

我完全按照 API 通知我的方式按照名称 ASC 对列进行排序(切换 DESC)。 https://datatables.net/manual/server-side

order[i][column] integer 应该应用排序的列。 这是对列信息数组的索引引用,即 也提交到服务器。

order[i][dir] string 排序方向 对于这个专栏。它将是 asc 或 desc 表示升序 或降序排列。

所以我的代码是这样的:

AJAX 调用:

var dataTable = $('#tableau').DataTable({
        "processing":true,
        "serverSide":true,
        "order":[],
        "orderFixed": [],
        "ordering":true,
        "ajax":{
            url:"/charbon/clae-listes/actions/appel.php", 
            type:"POST"
        },

        "columnDefs":[
            {
                "targets":[ 2, 3], 
                "orderable":false,
            },
        ],
    });

还有我的 appel.php 脚本

...    
if(isset($_POST["order"]))
    {
    $query .= 'ORDER BY '.$_POST['order'][0]['column'].' '.$_POST['order'][0]['dir'].' ';
    }
    else
    {
        $query .= 'ORDER BY id DESC ';
    }
...

这就是麻烦开始的地方:

当我单击第一列时,我在 localhost 上收到该错误消息:

DataTables 警告:表 id=tableau - JSON 响应无效。更多 有关此错误的信息,请参阅http://datatables.net/tn/1

当我单击我的第二​​列进行排序时,它对上一列进行排序。就像数据表直接从我的数据库中选择列号,偏移量为 1,因为我的数据库没有列 0

如何将右列归属于正确的排序?

输出 JSON 响应

第一列

<b>Fatal error</b>:  Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'order clause' in /Users/.../appel.php:45

第二列

{"draw":9,"recordsTotal":10,"recordsFiltered":11,"data":[["type","Client","client".........

我的标题

draw:9
columns[0][data]:0
columns[0][name]:
columns[0][searchable]:true
columns[0][orderable]:true
columns[0][search][value]:
columns[0][search][regex]:false
columns[1][data]:1
columns[1][name]:
columns[1][searchable]:true
columns[1][orderable]:true
columns[1][search][value]:
columns[1][search][regex]:false
columns[2][data]:2
columns[2][name]:
columns[2][searchable]:true
columns[2][orderable]:true
columns[2][search][value]:
columns[2][search][regex]:false
columns[3][data]:3
columns[3][name]:
columns[3][searchable]:true
columns[3][orderable]:false
columns[3][search][value]:
columns[3][search][regex]:false
order[0][column]:1
order[0][dir]:asc
start:0
length:10
search[value]:
search[regex]:false

【问题讨论】:

  • 你应该输出一个 JSON 响应 echo json_encode($output_array);
  • 你真的在....中返回了有效的JSON吗?您可能想查看Server-side processing example 以了解 SSP
  • @NeoMorina 完成

标签: php mysql ajax datatables columnsorting


【解决方案1】:

使用header('Content-Type: application/json'); 以便将 JSON 数据发送到浏览器,而无需对其进行解析。

$output_data = /** your array with the data **/;
header('Content-Type: application/json');
echo json_encode($output_data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2012-05-20
    • 2012-02-08
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多