我正在尝试将带有AJAX请求的响应式数据表填充到PHP脚本中,响应以JSON_encode格式返回,我可以在XHR请求中看到响应:
["abc","def","ght","jkl"]
以下是我正在使用的代码:
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr>
<th>Name</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
</tr>
</tfoot>
</table>
$('#dataTables-example').DataTable({
responsive: true,
"ajax": "search_autocomplete.php",
});
这是PHP脚本:
if ($result->num_rows >0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$list[] =$row['name'];
}
echo json_encode( $list );
}
答案 0 :(得分:2)
如果要插入数组数据源,即不是对象文字,则源必须是数组数组:
[["abc"],["def"],["ght"],["jkl"]]
$('#dataTables-example').DataTable({
"ajax": {
url: "search_autocomplete.php",
dataSrc: ''
}
});
if ($result->num_rows >0) {
while($row = $result->fetch_assoc()) {
$list[] = array($row['name']); //<----
}
echo json_encode($list);
}
如果您使用Jonathans建议,json_encode( array(data => $list))
也是如此 - 您仍然需要将每个项目包装到数组中,否则您将获得a
,d
,{{因为dataTables将每个字符串作为它所期望的数组访问,所以每个字符都被视为一个数组项,即列的数据。
g
if ($result->num_rows >0) {
while($row = $result->fetch_assoc()) {
$list[] = array($row['name']); //<----
}
echo json_encode(array('data' => $list));
}
答案 1 :(得分:1)
When using just a string value,至少,DataTables的ajax
选项希望将响应包装在另一个对象中:
请注意,DataTables期望表数据是对象的
data
参数中的项数组...{ "data": [ // row 1 data source, // row 2 data source, // etc ] }
要实现此目的,您可以在编码之前将$list
打包到另一个array()
中:
echo json_encode( array( data => $list ) );
答案 2 :(得分:0)
设置Json标题
header('Content-type: application/json');
echo json_encode( $list );
答案 3 :(得分:0)
您还应该在$list
循环之前定义变量while
。如果未定义,则仅返回姓氏。
$list = []