PHP JSON解析错误:浏览器无数据及代码问题排查
排查PHP输出JSON解析错误、浏览器无数据的问题
我来帮你梳理下代码里导致JSON解析失败的几个关键问题:
额外输出破坏JSON结构:你在
while循环里加了echo $num;,这会在最终的JSON数据前打印出一串数字(比如0、1、2...)。JSON要求输出必须是纯的JSON格式,任何额外的字符(包括这些数字、PHP报错信息)都会让前端JSON解析器直接报错,浏览器自然无法正常显示数据。代码语法不完整:最后一行
echo json_encode(ar...明显没写完,这会触发PHP语法错误,错误信息会被输出到页面,直接打乱了JSON的格式。你应该是想写echo json_encode($response);对吧?缺少JSON响应头:没有设置
Content-Type: application/json响应头,浏览器可能会把返回内容当成普通文本,前端在解析时也容易出现识别错误。字符编码潜在问题:如果数据库里包含中文或其他非ASCII字符,而数据库连接编码不是UTF-8,
json_encode会返回false,导致输出空内容或报错。需要确保连接后设置正确的编码。
修正后的完整代码示例
<?php // 开发环境开启错误提示,方便排查问题 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // 建立数据库连接 $con = mysqli_connect("localhost", "alsmwsk3", "skrktkzl12", "alsmwsk3"); // 检查连接是否成功 if (!$con) { header('Content-Type: application/json'); echo json_encode(["error" => "数据库连接失败: " . mysqli_connect_error()]); exit; } // 设置数据库编码为utf8mb4,支持所有Unicode字符(包括emoji) mysqli_set_charset($con, "utf8mb4"); // 执行查询 $result = mysqli_query($con, "SELECT * FROM NOTICE ORDER BY noticeDate DESC"); if (!$result) { header('Content-Type: application/json'); echo json_encode(["error" => "查询失败: " . mysqli_error($con)]); exit; } $response = []; while ($row = mysqli_fetch_array($result)) { // 建议用字段名而非索引,代码更易维护(替换成你表中实际的字段名) array_push($response, [ "noticeContent" => $row['noticeContent'], "noticeName" => $row['noticeName'], "noticeDate" => $row['noticeDate'] ]); // 移除echo $num; 这行额外输出 } // 设置响应头为JSON类型 header('Content-Type: application/json'); // 输出最终的JSON数据 echo json_encode($response); // 关闭数据库连接 mysqli_close($con); ?>
额外提示
- 用字段名代替数组索引(比如
$row['noticeContent']而非$row[0]),这样即使表结构调整,代码也不容易出错。 - 开发环境开启错误提示能快速定位语法或数据库错误,上线后记得关闭。
内容的提问来源于stack exchange,提问作者Seo woo
相关产品推荐
相关产品推荐

