未捕获的类型错误:尝试使用 PHP 填充响应式数据表时无法读取未定义的属性“长度”?
Posted
技术标签:
【中文标题】未捕获的类型错误:尝试使用 PHP 填充响应式数据表时无法读取未定义的属性“长度”?【英文标题】:Uncaught TypeError: Cannot read property 'length' of undefined when trying to populate responsive datatable using PHP? 【发布时间】:2015-09-14 20:14:23 【问题描述】:我正在尝试使用对 php 脚本的 AJAX 请求填充响应式数据表,响应以 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 );
【问题讨论】:
【参考方案1】:当你想插入一个数组数据源时,即不是对象字面量,源必须是一个数组数组:
[["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
、g
等,因为 dataTables 访问每个字符串作为它期望的数组,每个字符被视为一个数组项,一个列的数据。
if ($result->num_rows >0)
while($row = $result->fetch_assoc())
$list[] = array($row['name']); //<----
echo json_encode(array('data' => $list));
$('#dataTables-example').DataTable(
"ajax": "search_autocomplete.php"
);
【讨论】:
工作就像一个魅力非常感谢大家抽出时间【参考方案2】: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 ) );
【讨论】:
感谢 jonathan,我的表收到了数据,但每行仅填充第一个字母 ex ["abc","def","ghi"] 第 1 行仅显示 'a' 和第二行2 显示“d”【参考方案3】:设置 Json 标头
header('Content-type: application/json');
echo json_encode( $list );
【讨论】:
是否需要定义标题,因为我可以在 chrome 开发者工具中看到响应【参考方案4】:您还应该在while
循环之前定义变量$list
。如果未定义,则仅返回姓氏。
$list = []
【讨论】:
@njwin07 那是相关代码!请发布所有相关代码,没有它人们只会指出你实际上没有犯的错误,你得到一个好的答案的机会就会更小。以上是关于未捕获的类型错误:尝试使用 PHP 填充响应式数据表时无法读取未定义的属性“长度”?的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:$(...).ekkoLightbox 不是函数
尝试在 if 语句中检查 json 响应时出现未捕获(承诺)错误