You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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_bufferingmemory_limit等参数,确保足够容纳你的JSON内容。

最后再做一遍校验

修改完代码后,直接在浏览器里访问这个PHP接口,看返回的内容是不是纯JSON:

  • 如果看到的是干净的JSON字符串,没有任何其他文本、警告、错误信息,那基本就没问题了
  • 如果还有问题,复制返回的内容到任意在线JSON校验工具里,看看哪里格式不对

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

火山引擎 最新活动