编程语言
首页 > 编程语言> > Uncaught TypeError:尝试使用PHP填充响应数据表时,无法读取未定义的属性“ length”?

Uncaught TypeError:尝试使用PHP填充响应数据表时,无法读取未定义的属性“ length”?

作者:互联网

我正在尝试使用对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 );            
}

解决方法:

当您要插入数组数据源(即不是对象文字)时,源必须是数组数组:

[["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"
});

标签:ajax,datatables,html,php,jquery
来源: https://codeday.me/bug/20191120/2041316.html