PHP返回JSON至JavaScript时遇解析错误:Unexpected token b及输入截断问题
解决PHP返回JSON到JavaScript时的解析错误
我来帮你一步步搞定这两个JSON解析报错,这些坑我之前踩过好几次,太懂这种崩溃的感觉了😂
第一个错误:Unexpected token b in position 0
这个错误本质就是PHP返回的内容里混了非JSON的东西,你已经意识到是var_dump的问题,确实如此——var_dump输出的是调试文本(比如bool(true)开头就是b,array(...)开头是a),这些内容会跟JSON混在一起,导致JavaScript解析时直接懵掉。
解决这个问题的核心就是:让PHP只输出纯JSON,没有任何额外内容。除了删掉所有var_dump,还要注意这些细节:
- 删掉所有调试用的
echo语句 - 检查PHP文件开头
<?php标签前有没有空格、换行或者其他字符 - 尽量不要写
?>结束标签,避免标签后面的空白被输出 - 如果有引入其他PHP文件,也要确保那些文件没有额外输出
第二个错误:Unexpected end of JSON input
这个错误说明返回的JSON不完整,相当于JavaScript拿到了半截JSON,自然解析失败。常见原因和解决方法如下:
1. 检查JSON编码是否失败
json_encode有时候会因为数据里有不可编码的字符(比如特殊编码的字符串、循环引用的对象)而返回false,这时候如果直接输出false,那就是纯文本"false",不是合法JSON,或者干脆没输出内容。
可以给PHP加个编码检查,调试阶段非常有用:
// 假设你的数据源是$responseData $jsonOutput = json_encode($responseData); // 检查编码是否成功 if ($jsonOutput === false) { // 输出错误信息,方便调试 die(json_encode(['error' => 'JSON编码失败: ' . json_last_error_msg()])); } // 设置正确的响应头,告诉浏览器这是JSON header('Content-Type: application/json; charset=utf-8'); // 只输出JSON内容 echo $jsonOutput; // 用exit确保后面没有其他代码执行输出 exit;
2. 排查PHP是否提前终止执行
比如你的代码里有die()、exit(),或者触发了致命错误(比如调用了不存在的函数),导致JSON还没输出完就停了。调试阶段可以开启错误提示:
// 放在PHP文件最开头 error_reporting(E_ALL); ini_set('display_errors', 1);
这样如果有错误,就能直接看到哪里出问题了,不会让输出莫名其妙截断。
3. 检查服务器输出限制
如果你的JSON数据特别大,服务器可能会截断输出。可以检查PHP配置里的output_buffering、memory_limit等参数,确保足够容纳你的JSON内容。
最后再做一遍校验
修改完代码后,直接在浏览器里访问这个PHP接口,看返回的内容是不是纯JSON:
- 如果看到的是干净的JSON字符串,没有任何其他文本、警告、错误信息,那基本就没问题了
- 如果还有问题,复制返回的内容到任意在线JSON校验工具里,看看哪里格式不对
内容的提问来源于stack exchange,提问作者prnz




