2017-03-09 81 views
0

我的数据表从另一个带有ajax的文件中加载它的正文给了我无效的JSON错误,但是当我在网络响应中检查我的开发人员工具时,我的JSON是有效的?Datatable当我的JSON有效时,无效的JSON响应错误? PHP

这是我的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" } 
    ] 
    }); 
+0

究竟是什么错误? –

+0

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

+0

请提供AJAX代码,在其中设置'dataType':'json'。谢谢。 – user1544541

回答

1

这是数据表等待:

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

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

你需要类似的东西:

{ 
    "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'] 
); 
+0

啊,谢谢!我在哪里可以将这些字段定义为这种格式? – PHPNewbie

+0

好吧,让他们改变,我的JSON数据现在回来,就像你说我会需要,它验证,但仍然,我加载表时,同样的错误? – PHPNewbie

+0

您是否已将“列”属性添加到数据表定义中? –

1

当您从数据表服务器端脚本的请求与processing设置为true然后将其发送this数据。

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

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

希望有所帮助。

+0

感谢您抽出时间发表评论,我试过将它设置为false,但不幸的是,我仍然得到相同的无效JSON错误 – PHPNewbie

+0

嗨@PHPNewbie,另一个问题是当您初始化表时你告诉它期望一个对象数组,而你只是给它一个数组或数组。另一个答案为您提供了需要返回的数据类型的详细信息。实际上,您同时遇到了两个问题:向服务器询问它无法理解的信息,以及它尽可能做到最好的信息时,它会以错误的格式返回数据。希望有意义吗? DataTables是为这类事情而构建的,但你需要以正确的方式来实现它们。 – annoyingmouse

+0

谢谢!你能帮我介绍一下如何完成这项工作吗?这将是非常appriciated – PHPNewbie