服务端jQuery DataTables报错TypeError: c is undefined求助
我之前也踩过这个坑,尤其是开启serverSide: true的时候,明明能拿到JSON数据,但DataTables就是报这个莫名其妙的错。结合你的代码和报错信息,给你几个靠谱的排查方向:
1. 确认Server-Side返回的JSON符合DataTables强制要求
当开启serverSide: true时,DataTables对返回的JSON结构有严格的格式要求,必须包含以下四个核心字段:
draw: 和请求中携带的draw参数完全一致(用来匹配请求和响应的对应关系)recordsTotal: 未过滤的总记录数recordsFiltered: 过滤后的记录数(没有过滤逻辑的话就等于recordsTotal)data: 实际要渲染的表格数据数组
哪怕你的数据内容完全正确,但少了这几个字段,DataTables就会解析失败,抛出类似c is undefined的错误。你可以打开浏览器开发者工具的Network面板,查看接口返回的JSON,确认是否包含这四个字段。
2. 修复ajax的data回调函数
你的代码里data回调函数是空的:
"data": function (data) { }
这个函数需要返回一个对象(哪怕不需要额外参数,也要返回传入的data对象)。现在它没有返回值,相当于给请求传递了undefined,这会打乱DataTables的请求处理逻辑。
修改成这样即可:
"data": function (data) { // 不需要额外参数的话,直接返回原请求参数对象 return data; }
如果本来就不需要自定义请求参数,也可以直接删掉这个data配置项。
3. 检查columns字段和返回数据的匹配度
确认你columns里定义的每个data字段(比如cid、account、action等),在返回的data数组的每个对象里都存在。如果某个字段在数据中不存在,DataTables渲染时也会抛出这类未定义错误。
比如你可以暂时注释掉action这一列的配置,看看错误是否消失,以此来定位是哪个字段出了问题。
4. 排查版本兼容性问题
有时候jQuery和DataTables的版本不兼容也会导致这类奇怪的错误,比如用了jQuery 3.x但搭配了旧版的DataTables。建议确保两者版本匹配,比如jQuery 3.x搭配DataTables 1.10+版本。
另外,你可以暂时换成未压缩的jquery.dataTables.js文件,这样报错的位置会更清晰,能直接看到是哪一行代码触发的错误,方便进一步排查。
内容的提问来源于stack exchange,提问作者Durga

