DataTables提示无效JSON响应,合规数据仍报错求排查
DataTables 提示“无效JSON响应”问题排查
我知道这肯定是最常见的问题之一,但我看不出自己的数据有什么问题。我认为完全遵循了DataTables要求的数据格式,但仍收到“DataTables warning: table - Invalid JSON response”警告。每个记录有7个字段,表格也对应7个字段且已在jQuery中映射,请问我遗漏了什么?
我的代码
PHP代码
$sql = "SELECT eventid, event_type, date_display, date_from, date_to, location, done FROM events LIMIT 0, 30"; $get_result = mysql_query($sql); $arr = Array(); while($res=mysql_fetch_assoc($get_result)) { $arr['data'][] = $res; } echo json_encode($arr);
jQuery代码
function do_search() { var search_term=$("#search_term").val(); $.ajax ({ type:'post', url:'get_results.php', data:{ search:"search", search_term:search_term }, success:function(response) { console.log(JSON.parse(response)) $('#events').DataTable({ ajax: JSON.parse(response), columns: [ { data: 'eventid' }, { data: 'event_type' }, { data: 'date_display' }, { data: 'date_from' }, { data: 'date_to' }, { data: 'location' }, { data: 'done' }, ], "lengthMenu": [ [-1, 10, 25, 50, 100], ["All", 10, 25, 50, 100] ] }); } });
HTML代码
<table id="events" class="display" style="width:100%"> <thead> <tr> <th>ID</th> <th>Type</th> <th>Date</th> <th>From</th> <th>To</th> <th>Location</th> <th>To do</th> </tr> </thead> </table>
控制台输出的数据
{ "data": [ { "eventid": "1", "event_type": "Senate meeting", "date_display": "61-60", "date_from": "61", "date_to": "60", "location": "Unknown", "done": "y" }, { "eventid": "2", "event_type": "Legal hearing", "date_display": "73-70", "date_from": "73", "date_to": "70", "location": "Unknown", "done": "" }, [etc...] ] }
问题原因及解决方案
核心问题:ajax参数使用错误
DataTables的ajax参数是用来指定请求数据的方式(比如URL、请求配置),而非直接传入已获取到的JSON数据。如果你已经通过自定义Ajax请求拿到了数据,应该用data参数传递数据,而非ajax。
修复后的jQuery代码
function do_search() { var search_term=$("#search_term").val(); $.ajax ({ type:'post', url:'get_results.php', data:{ search:"search", search_term:search_term }, success:function(response) { var responseData = JSON.parse(response); console.log(responseData); // 先销毁已存在的DataTables实例,避免重复初始化报错 if ($.fn.DataTable.isDataTable('#events')) { $('#events').DataTable().destroy(); } // 初始化表格,用data参数传递数据 $('#events').DataTable({ data: responseData.data, // 直接传入数组格式的数据集 columns: [ { data: 'eventid' }, { data: 'event_type' }, { data: 'date_display' }, { data: 'date_from' }, { data: 'date_to' }, { data: 'location' }, { data: 'done' }, ], "lengthMenu": [ [-1, 10, 25, 50, 100], ["All", 10, 25, 50, 100] ] }); } });
额外优化建议
- PHP端响应头设置:在
echo json_encode($arr);之前添加header('Content-Type: application/json');,明确返回JSON类型的响应头,避免潜在的解析问题。 - 错误排查:可以在PHP中添加错误捕获,确保SQL查询没有失败,比如:
if (!$get_result) { die(json_encode(['error' => mysql_error()])); }
内容的提问来源于stack exchange,提问作者HBMCS
相关产品推荐
相关产品推荐

