Laravel8返回对象数组JSON,DataTables报未知参数'0'错误求助
问题描述
Laravel 8控制器中获取数据的代码:
$projects_data = Project::with('group')->get(['id','group_id'])->toArray(); return response()->json($projects_data);
返回的是包含对象的JSON数组,前端DataTables报错:
"DataTables warning: table id=records-table - Requested unknown parameter '0' for row 0, column 0."
HTML代码:
<table class="table table-bordered data-table" id="records-table"> <thead> <tr> <th>Id</th> <th>group_id</th> </tr> </thead> <tbody> </tbody> </table>
JS代码:
$(document).ready(function() { $('#records-table').DataTable({ processing: true, ajax: { url : 'projects/data', dataSrc: "", dataType: "json", columns:[ {data: 'id', name: 'id'}, {data: 'group_id', name: 'group_id'}, ], }, }); });
怀疑DataTables期望数组组成的JSON数组,而非对象数组,尝试移除processing、删除dataSrc后仍报错,寻求解决方法。
解决方案
问题出在DataTables的配置结构错误——columns选项不应该嵌套在ajax对象内部,而是要和ajax同级放置。
修正后的JS代码:
$(document).ready(function() { $('#records-table').DataTable({ processing: true, ajax: { url: 'projects/data', dataSrc: "", dataType: "json" }, columns: [ {data: 'id', name: 'id'}, {data: 'group_id', name: 'group_id'} ] }); });
补充说明:
- Laravel返回的对象数组完全符合DataTables的要求,不需要改成数组形式,你之前的怀疑方向有误。
dataSrc: ""的配置是正确的,因为你的接口直接返回数据数组,不需要解析嵌套的属性。
内容的提问来源于stack exchange,提问作者dror a
相关产品推荐
相关产品推荐

