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

AJAX请求JSON数据时出现SyntaxError错误的问题求助

解决AJAX解析JSON时的SyntaxError: Unexpected token错误

这个错误我日常调试中碰到过好多次,核心问题就是服务器返回的内容不是合法的JSON格式,导致jQuery没法正常解析。咱们从几个常见方向排查解决:

1. 先排查PHP端的额外输出

最常见的原因是PHP在echo json_encode($result);之前输出了额外内容——比如文件开头的空格、BOM头,或者代码里的var_dump()、echo调试语句,甚至是PHP抛出的Notice/Warning错误信息。这些内容会插在JSON的最前面,导致解析器在位置0就遇到了非法字符。

解决办法:

  • 用编辑器把PHP文件保存为「UTF-8无BOM」格式,避免文件开头的隐藏字符;
  • 检查你的follow模型方法里有没有额外的输出语句,全部删掉;
  • 开启PHP错误日志(而不是直接输出到页面),或者在代码开头加error_reporting(0);临时屏蔽错误输出(开发环境不建议,最好看日志找问题)。

2. 确保json_encode能正常生成JSON

如果$result里包含非UTF-8编码的字符,或者循环引用的对象,json_encode会直接返回false,这时候echo出来的就是空内容,自然会触发解析错误。

解决办法:
在PHP里先检测JSON编码是否成功,同时返回错误信息方便调试:

// 先设置正确的响应头
header('Content-Type: application/json');

$result = $this->model->follow($_POST, $username);
$jsonData = json_encode($result);

// 检测编码是否失败
if ($jsonData === false) {
    echo json_encode([
        'status' => 'error',
        'message' => 'JSON编码失败:' . json_last_error_msg()
    ]);
} else {
    echo $jsonData;
}

3. 优化AJAX的错误调试

你的AJAX错误函数只alert了jqXHR,其实可以打印服务器返回的原始内容,直接看到到底是什么导致了解析失败:

$.ajaxSetup({ dataType:"json", });
$.ajax({
    url:'search/follow',
    method:'POST',
    data:{'username':username},
    success:function (data,textStatus,jqXHR) {
        console.clear();
        console.log(data);
    },
    error:function (jqXHR, textStatus, errorThrown) {
        console.log('AJAX错误类型:', textStatus);
        console.log('错误描述:', errorThrown);
        console.log('服务器返回内容:', jqXHR.responseText); // 重点看这个!
    },
    complete:function (jqXHR,textStatus) {
    }
});

打开浏览器控制台,看服务器返回内容这一项,就能直观看到服务器到底给了什么——比如是不是有错误提示、空内容,还是格式错误的JSON。

4. 补充响应头设置

虽然jQuery的dataType:"json"会尝试解析JSON,但如果服务器没有返回正确的Content-Type响应头,可能会触发解析异常。所以在PHP开头加上header('Content-Type: application/json');是个好习惯,确保服务器明确告诉客户端返回的是JSON数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:44