You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SyntaxError: JSON解析遇意外<符号,同控制器页面一正常一报错求助

解决 SyntaxError: Unexpected token < in JSON at position 4 问题

这个错误我碰到过好多次,核心原因其实很直白:你的前端等着后端返回合法JSON来解析,但后端给你的却是HTML内容(比如服务器报错页、错误提示页面)——毕竟<是HTML标签的起始符号,JSON解析器直接就懵圈报错了。

结合你说的「两个页面调用同一个控制器函数,一个正常一个炸锅」的情况,你可以按下面的步骤挨个排查:

  • 先抓包看返回内容,这是最快定位的办法:打开浏览器开发者工具(按F12,切到「网络」面板),触发那个报错页面的价格计算请求,然后点进请求看「响应」标签里的内容。大概率你会看到一堆HTML代码(比如PHP的报错堆栈、服务器500错误页),这直接就能锁定后端的问题所在。
  • 对比两个页面的请求参数差异:既然是同一个控制器函数,那问题十有八九出在传入的参数上。仔细比对两个页面发送的请求参数:
    • 有没有参数缺失?比如正常页面传了product_sku,报错页面漏传了?
    • 参数格式不对?比如某个参数应该是数字,结果传了带特殊字符的字符串?
    • 参数值超出预期范围?比如某个数量参数传了负数,后端处理时直接抛出错误?
  • 检查控制器的分支逻辑:就算是同一个函数,也可能因为参数不同走了不同的代码分支。比如当某个参数为空时,后端没有返回JSON,而是直接echo了错误提示的HTML,或者跳转到了错误页面。你可以在控制器函数里加日志,把每次请求的参数和返回内容都记录下来,对比正常请求和报错请求的差异。
  • 排查前端AJAX请求的配置差异:两个页面的请求配置是不是有区别?比如一个设置了contentType: 'application/json',另一个没设置,导致后端解析参数出错?或者一个是GET请求,另一个是POST请求,控制器对请求方法的处理逻辑不一样?
  • 检查服务器路由/重写规则:有没有可能报错页面的请求路径被服务器的重写规则拦截了,没正确路由到控制器?比如URL看起来一样,但实际有大小写差异(服务器区分大小写的话),或者带了隐藏的查询参数?

举个常见的场景:如果报错页面的某个参数是未定义的,后端处理时抛出了致命错误,服务器就会返回错误HTML页面,而不是你期望的JSON,这时候前端解析就会出现这个错误。

先从抓包看响应内容这一步开始,绝对能帮你快速找到问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:51:58