【问题标题】:Datatable Invalid JSON response error when my JSON is valid? PHP当我的 JSON 有效时,Datatable Invalid JSON response 错误? PHP
【发布时间】:2017-03-09 09:34:47
【问题描述】:

我的数据表正在使用 ajax 从另一个文件加载其正文给我无效 JSON 错误,但是当我在网络响应下检查我的开发人员工具时,我的 JSON 是否有效?

这是我的 PHP 和 SQL:

<?php 
header('Content-Type: application/json');
$output = array('data' => array());
$query = "SELECT * FROM table"; 
$stmt = sqlsrv_query($sapconn2, $query);

$x = 1;

while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){

    $output['data'][] = array(
            'col_1' => $x,
            'ID' => $row['ID'],
            'QuoteID' => $row['QuoteID'],
            'CardCode' => $row['CardCode'],
            'SlpCode' => $row['SlpCode'],
            'SlpName' => $row['SlpName'],
            'BandA' => $row['BandA'],
            'NewPrice' => $row['NewPrice']
        );
    $x ++;
}

echo json_encode($output);
?>

这是我在浏览器中返回的 JSON:

{
"data": [
    [1, 138, 25, "000123", "222", "test data", 222, 222],
    [2, 144, 25, "000123", "132", "test data", 465, 789],
    [3, 160, 25, "000123", "456132", "test data", 5599, 5499],
    [4, 171, 25, "000123", "789", "test data", 7897, 989],
    [5, 172, 25, "000123", "11111", "test data", 1, 11],
    [6, 182, 25, "000123", "132166", "test data", 1323, 133],
    [7, 183, 25, "000123", "135456", "test data", 1332132, 13213],
    [8, 184, 25, "000123", "1321", "test data", 5643214, 6513]
]
}

编辑:

    var testTable = $("#testTable").DataTable({
    processing: false,
    serverSide: true,
    dataType : 'json',
    ajax: "test.php",
    columns: [
        { "data": "col_1" },
        { "data": "ID" },
        { "data": "QuoteID" },
        { "data": "CardCode" },
        { "data": "SlpCode" },
        { "data": "SlpName" },
        { "data": "BandA" },
        { "data": "NewPrice" }
    ]
    });

【问题讨论】:

  • 究竟是什么错误?
  • DataTables 警告:表 id=testTable - JSON 响应无效。有关此错误的更多信息,请参阅datatables.net/tn/1
  • 请提供AJAX代码,在里面设置'dataType':'json'。谢谢。
  • AJAX 添加到问题中,谢谢
  • datatables.net/manual/ajax。看来您的 json 不是数据表所等待的。

标签: php sql-server json datatables


【解决方案1】:

这是数据表等待的:

{
    "data": [
        {
            "name": "Tiger Nixon",
            "position": "System Architect",
            "salary": "$320,800",
            "start_date": "2011/04/25",
            "office": "Edinburgh",
            "extn": "5421"
        },
        ...
    ]
}

“数据”元素是一个对象数组,而不是传递一个数组数组。

你需要这样的东西:

{
    "data": [
        { "id": 1, "second_field": 138, "third_field": 25, "fourth_field": "000123", ... },
        { "id": 2, "second_field": 138, "third_field": 25, "fourth_field": "000123", ... },
    ]
}

已编辑:

$output['data'][] = array(
    'col_1' => $x,
    'col_2' => $row['ID'],
    'col_3' => $row['QuoteID'],
    'col_4' => $row['CardCode'],
    'col_5' => $row['SlpCode'],
    'col_6' => $row['SlpName'],
    'col_7' => $row['BandA'],
    'col_8' => $row['NewPrice']
);

【讨论】:

  • 啊,谢谢!我将在哪里将字段定义为这种格式?
  • 好的,进行了更改,我的 JSON 数据现在像您说的那样返回,并且它验证了,但是在加载表格时仍然出现同样的错误?
  • 您是否在数据表定义中添加了“columns”属性?
  • 是的,我做了,我会编辑我的问题,向你展示我做了什么。
【解决方案2】:

当您从 DataTables 向服务器端脚本发出请求并将 processing 设置为 true 时,它会发送 this 数据。

当它返回数据时,DataTables 期望数据遵循these 约定。

您可以在服务器端脚本中考虑这些(有一个很好的例子here。)或选择不同的方法来添加您的数据。如果您将processing 设置为false,您可能会发现一切都如您所愿。

希望对您有所帮助。

【讨论】:

  • 感谢您抽出宝贵时间发表评论,我已尝试将其设置为 false,但不幸的是,我仍然收到相同的 Invalid JSON 错误
  • 嘿@PHPNewbie,另一个问题是,当你初始化你的表时,你告诉它期待一个对象数组,而你只是给它一个或多个数组。另一个答案为您提供了需要返回的数据类型的详细信息。实际上,您同时遇到了两个问题:向您的服务器询问它没有希望理解的信息,并且当它尽力而为时,它以错误的格式返回数据。希望这有意义吗? DataTables 是为这类事情而构建的,但您需要以正确的方式来实现它们。
  • 谢谢!你能帮我看看如何完成这项工作吗?这将是非常受欢迎的
  • 最后修复了它,我在文档中包含了 HTML,这使它无法验证。再次感谢。
猜你喜欢
  • 2020-03-06
  • 2020-11-07
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
相关资源
最近更新 更多