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
相关产品推荐
相关产品推荐

