前端JSON请求报SyntaxError: Unexpected token '<' 解析错误求助
「Unexpected token < in JSON」报错排查方案
该报错不存在前端本地JSON编码、页面语法配置层面的诱因,核心触发逻辑是前端JSON.parse()执行时,拿到的接口响应体根本不是合法JSON字符串,位置1出现的<,是HTML内容、PHP错误输出、服务器报错页的典型起始字符——本质是后端接口没有正常输出约定的JSON结构,直接返回了一段带尖括号的非JSON内容。
按优先级排查路径
- 第一优先:抓取接口原始响应,不要靠前端解析结果反向猜测。打开浏览器开发者工具「Network」面板,定位发往PHP接口的请求,查看「Response」标签的原始返回内容:
- 如果返回内容以
<br />、<b>Warning</b>、<b>Fatal error</b>开头,说明PHP代码在执行到输出JSON的逻辑前就抛出了警告/致命错误,直接把报错文本当响应体返回了 - 如果返回整段结构完整的HTML错误页(比如404 Not Found、500 服务器内部错误页面),说明请求根本没有命中目标PHP接口文件,大概率是URL路径写错、接口文件权限不足、服务器路由配置异常
- 如果返回内容直接是PHP源码片段(开头带
<?php标记),说明当前运行环境没有配置PHP解析能力,服务器把PHP文件当纯静态文本直接返回了
- 如果返回内容以
- 第二优先:核对前端封装请求的逻辑漏洞
- 确认封装方法是否不管响应内容类型,都会强行执行
JSON.parse()——这是触发该类报错的常见封装问题,哪怕后端返回了非JSON的错误内容,前端也会硬解析抛出尖括号报错 - 确认请求的方法(GET/POST)、请求头、传参格式是否和后端接口的接收规则匹配,避免因请求不合法被服务器直接拦截返回错误页
- 确认请求URL的路径拼写,避免路径错误命中网站根目录的默认404 HTML页面
- 确认封装方法是否不管响应内容类型,都会强行执行
- 第三优先:校验PHP接口的输出规范
- 清理PHP文件开头/结尾的冗余空行、杂散echo调试内容、UTF-8 BOM头,避免这些非预期内容出现在JSON响应的最前面
- 输出JSON前显式设置响应头:
header('Content-Type: application/json; charset=utf-8'),避免服务器自动将响应识别为HTML类型 - 生产环境关闭PHP的页面错误展示(
display_errors = Off),将错误信息写入日志文件,避免PHP警告直接混入响应体
内容的提问来源于stack exchange,提问作者José Vieiros
相关产品推荐
相关产品推荐

