You need to enable JavaScript to run this app. Ajax触发Unexpected end of JSON input报错的原因排查
优惠活动
大模型
产品
解决方案
定价
更多

Ajax触发Unexpected end of JSON input报错的原因排查

Unexpected end of JSON input 报错原因定位

这个报错的触发逻辑非常直白:前端执行JSON解析操作时,拿到的待解析内容是空字符串、空值,或是被截断到根本拼不成合法JSON结构的残缺内容。结合你贴的前后端代码,常见的触发原因按排查优先级排列:

  • 后端JSON编码直接执行失败,输出空内容
    你现在后端的逻辑是直接echo json_encode($departTickets),完全没做编码结果校验:如果$departTickets里的字符串不是UTF-8编码、包含PHP资源类型这种没法被序列化的内容,或是数组嵌套深度超过PHP默认的json_encode限制,json_encode会直接返回false。这时候echo false的最终输出就是空字符串,前端拿空值调用jQuery.parseJSON(res),百分之百会触发这个报错。
  • 后端有多余的输出干扰,把JSON结构破坏
    比如fetchtickets.php文件开头/结尾残留了BOM头、无意义的换行空格,或是代码里提前输出了PHP的Warning/Notice报错信息、其他调试用的echo内容,本来合法的JSON会被这些杂文本挤成残缺内容,甚至直接把JSON截断。要是代码里在echo json_encode之前就提前exit、走了重定向逻辑,根本没走到返回JSON的分支,响应体就会是完全空的状态。
  • AJAX请求压根没拿到正确的接口响应
    比如你填的接口路径/desk/template/fetchtickets.php实际不存在,服务器返回空的404响应,或是被权限校验拦截返回了空的未授权提示,前端拿到的根本不是预期的JSON结构。

快速定位问题的方法

直接在success回调的第一行加console.log('接口原始返回内容:', res),先确认res到底是什么:

  • 如果打出来是空字符串,优先回去查后端:在echo之前判断json_encode($departTickets)的返回值,如果是false就直接输出json_last_error_msg()看具体编码失败的原因;同时把PHP文件里所有多余的换行、BOM头清掉,在返回JSON前加header('Content-Type: application/json; charset=utf-8')明确响应格式,临时关掉PHP的错误提示输出避免warning干扰。
  • 如果打出来的内容混有warning文本、HTML标签,把对应的多余输出删掉就行。

另外提一句你代码里的小逻辑问题:就算JSON解析成功,你现在写的for (var jsonId in data)拿到的是数组的索引键,根本不是实际的票务数据,最后塞到页面上的也只是数字索引,这个后续也需要调整,和当前的JSON解析报错无关。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 13:15:06