DataTables与jQuery无法正常工作:无效JSON响应问题求助
解决DataTables“无效JSON响应”的踩坑指南
兄弟我太懂这种被代码逼疯的感觉了!DataTables报这个错,90%的问题都出在后端返回的JSON上,咱们一步步来排查:
先扒开后端输出的真面目
直接在浏览器里访问item_fetch.php,或者打开Chrome/Firefox的开发者工具(F12)切到Network标签,找到这个POST请求看Response内容。重点排查有没有这些“脏东西”:- PHP的错误提示(比如
Undefined index这类) - 多余的空格、换行或者HTML标签
- 调试用的
echo语句
这些都会把原本正确的JSON搅成无效格式。
- PHP的错误提示(比如
验证JSON格式的合法性
把后端返回的内容复制到JSON校验工具(随便找个在线的就行),或者直接在浏览器控制台跑JSON.parse('你复制的内容'),看有没有语法错误。常见的坑有:数组最后一个元素多了逗号、字符串用了单引号(JSON要求双引号)、对象键没加引号。核对DataTables要求的JSON结构
因为你开了serverSide: true,DataTables要求后端返回固定结构的JSON,必须包含这几个字段:{ "draw": 1, // 和前端请求的draw值一致,用来防重复请求 "recordsTotal": 100, // 总记录数 "recordsFiltered": 100, // 过滤后的记录数(没过滤就和recordsTotal一致) "data": [ // 表格数据,二维数组格式 ["第一行第一列", "第一行第二列", ...], ["第二行第一列", "第二行第二列", ...] ] }要是字段名拼错(比如把
recordsFiltered写成recordFiltered)或者漏了某个字段,DataTables直接就认不出。修正前端代码的小细节
你的代码里columnDefs有个多余的逗号,虽然大部分浏览器能兼容,但偶尔会导致解析问题,建议去掉:$(document).ready(function() { $('#item_data').DataTable( { "processing": true, "serverSide": true, "ajax":{ url:"item_fetch.php", type:"POST" }, "columnDefs":[ { "targets":[7, 8, 9], "orderable":false // 这里的逗号去掉了 } ], "pageLength": 10 }); });确认AJAX请求的基本正确性
检查item_fetch.php的路径是不是对的,有没有权限访问这个文件。看Network里的请求状态码:404是路径错了,500是后端代码报错了,403是权限不够。
先从后端输出开始查,这是最常见的问题!
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

