php - jquery datatables mysql php DataTables警告(表ID ='displayData'): DataTables warning: JSON data from could not be parsed

标签 php jquery mysql datatables

加载数据表时出现以下消息错误

DataTables 警告(表 id='displayData'):DataTables 警告:无法解析来自的 JSON 数据。

我的灵感来自于 http://datatables.net/examples/server_side/server_side.html

我的html代码:

<!DOCTYPE html>

<html>

    <head>
        <title>Hello jQuery world!</title>
        <link rel="stylesheet" type="text/css" href="../jquery/css/192/ui-lightness/jquery-ui-1.9.2.custom.css">
        <style type="text/css">
            @import "../jquery/datatables/194/media/css/demo_page.css";
            @import "../jquery/datatables/194/media/css/demo_table.css";
        </style>
        <script type="text/javascript" src="../jquery/js/183/jquery-1.8.3.js"></script>
        <!-- <script type="text/javascript" src="../jquery/js/192ui/jquery-ui-1.9.2.custom.js"></script> -->
        <script type="text/javascript" charset="utf-8" src="../jquery/datatables/194/media/js/jquery.dataTables.js"></script>
        <script type="text/javascript" src="../js/26script.js"></script>
    </head>

    <body>

<table cellpadding="0" cellspacing="0" border="0" class="display" id="displayData"> 

    <thead>
        <tr>
            <th align="left">id</th>
            <th align="left">codepays</th>
            <th align="left">CodePostal</th>
            <th align="left">Ville</th>
            <th align="left">nomadmin</th>

        </tr>
    </thead>
    <tbody>
        <tr>
            <td colspan="5" class="dataTables_empty">Loading data from server</td> 
        </tr>
    </tbody>
</table>
</html>

我的 javascript 26script.js:

$(document).ready(function() {

    $('#displayData').dataTable({

        "sAjaxSource" : "../data/json/261arrays.php",

    });
});

我还尝试过以下选项

$(document).ready(function() {

    $('#displayData').dataTable({
                "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource" : "../data/json/261arrays.php",

    });
});

我的 PHP 脚本。 (我正在使用 PDO 访问我的 mysql 数据库。)

<?php

$aColumns = array('id', 'codepays', 'CodePostal', 'Ville', 'nomadmin');

$dsn = 'mysql:host=localhost;dbname=';
$db = 'fde_travel';
$username = 'root';
$password = 'root';

//Initialisation de la liste
$list = array();
$listt = array();
$sTable = "tvl_cp";
$sIndexColumn = "id";

//Connexion MySQL
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);

try {
    $db = new PDO($dsn . $db, $username, $password, $options);
} catch (Exception $ex) {
    echo $ex -> getMessage();
}

//Construction de la requete
$sQuery = "SELECT id id ,codepays  , CP CodePostal, VILLE Ville, nomadmin1 nomadmin FROM tvl_cp limit 100";

$query = $db -> prepare($sQuery);



$query -> execute();

$ar = array();
$num = 0;

while ($listt = $query -> fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
    $ar[$num] = $listt;
    $num = $num + 1;

}

$oututt['aaData'] = $ar;

//header('Content-type: application/json');

echo json_encode($oututt);

?>

当我记录结果数组时,我得到一个具有以下结构的数组:

{
    "aaData": [
        [
            "1",
            "BE",
            "1000",
            "Bruxelles",
            "Bruxelles-Capitale"
        ],
        [
            "2",
            "BE",
            "1005",
            "Conseil Region Bruxelles-Capitale",
            "Bruxelles-Capitale"
        ],
        [
            "3",
            "BE",
            "1006",
            "Raad Vlaamse Gemeenschapscommissie",
            "Bruxelles-Capitale"
        ],
        [
            "4",
            "BE",
            "1007",
            "Ass. Commiss. Communau. française",
            "Bruxelles-Capitale"
        ],
        [
            "100",
            "BE",
            "1700",
            "Dilbeek Sint-Ulriks-Kapelle",
            "Vlaanderen"
        ]
    ]
}

我在 http://jsonlint.com/中检查了这个数组,它是格式良好的 json 数组

当我复制此数组并粘贴到扩展名为 file.json 的文件时,如果我修改脚本,我的数据表将被加载,我可以在屏幕上看到结果。

我还尝试过 http://debug.datatables.net/bug 来查看数组中的最终问题,但我不明白它是如何工作的。

我需要修改什么才能在屏幕上显示,我的 json 数组是通过 php 脚本实现的?

提前致谢

最佳答案

是的,似乎 php 返回的预期结果无法处理数据表库。

json 文件中的数组模式不能与 php 脚本生成的 json 数组模式相同。因此,如果我们按照引用示例中发生的情况进行操作 http://www.datatables.net/examples/data_sources/server_side.html

$output = array(
        "sEcho" => 1,
        "iTotalRecords" => 100,
        "iTotalDisplayRecords" => 100,
        "aaData" => array()
    );


while ($aRow = $query -> fetch(PDO::FETCH_ASSOC)) {
    $row = array();
    for ( $i=0 ; $i<count($aColumns) ; $i++ ) {
        if ( $aColumns[$i] != ' ' ) {
            /* General output */
            $row[] = $aRow[ $aColumns[$i] ];
        }
    }
    $output['aaData'][] = $row;
}

echo json_encode($output);

我们得到由 php 脚本生成的 json 数组的以下结构

{
    "sEcho": 1,
    "iTotalRecords": 100,
    "iTotalDisplayRecords": 100,
    "aaData": [
        [
            "1",
            "BE",
            "1000",
            "Bruxelles",
            "Bruxelles-Capitale"
        ],
        [
            "2",
            "BE",
            "1005",
            "Conseil Region Bruxelles-Capitale",
            "Bruxelles-Capitale"
        ],
        [
            "3",
            "BE",
            "1006",
            "Raad Vlaamse Gemeenschapscommissie",
            "Bruxelles-Capitale"
        ],
        [
            "4",
            "BE",
            "1007",
            "Ass. Commiss. Communau. française",
            "Bruxelles-Capitale"
        ],
        [
            "100",
            "BE",
            "1700",
            "Dilbeek Sint-Ulriks-Kapelle",
            "Vlaanderen"
        ]
    ]
}

在datatables.net网站中,数据是通过“mysql_query”获取的(我不喜欢,因为php不赞成使用mysql接口(interface))。 php 建议 mysqli 接口(interface)。但对于其他数据库可能我们需要使用PDO接口(interface)。要使用 PDO 接口(interface)获得相同模式的相同结果,需要编写: fetch(PDO::FETCH_ASSOC)

关于php - jquery datatables mysql php DataTables警告(表ID ='displayData'): DataTables warning: JSON data from could not be parsed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14170864/

相关文章:

javascript - 使用 Knockout 将项目添加到列表后更改背景颜色

php - 使用 GROUP BY 和 ORDER BY 条件在两个 MySQL 表上加入与联合

php - MySQL PHP 排序依据

php - 我可以在 PHP 循环中使用 divide 吗?

php - 来自 Dockerfile 的 Docker Compose : Set variable in php. ini

php - MySQL + PHP : Display items per week?

mysql - SELECT 选定的 CHECKBOX 并将选定的行插入到数据库中

php - php中的手机型号检测

javascript - 当删除一个克隆 div 时对克隆 div 重新编号

jquery - 如何获取表格字段的值到模态框?