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

Uncaught SyntaxError: JSON输入意外结束问题排查求助

排查JSON解析错误(Unexpected end of JSON input)的步骤

这个错误的核心是JavaScript拿到的响应文本不是有效的JSON——要么是空字符串,要么是被额外内容污染的不完整JSON。以下是逐一排查和修复的方法:

第一步:检查PHP端输出是否为有效JSON

直接在浏览器访问 /shoba/publications.php,查看页面显示的内容,对应不同情况处理:

  • 显示空白:说明查询无数据或json_encode执行失败。给PHP代码添加调试和容错逻辑:
    // 确保仅输出JSON,清理文件开头/结尾的多余空格、HTML标签
    <?php
    $sql = "SELECT * FROM `publication_information`";
    $pubs = $conn->query($sql);
    
    // 检查SQL查询是否成功
    if (!$pubs) {
        die(json_encode(['error' => $conn->error]));
    }
    
    $existing_publications = [];
    while ($row = mysqli_fetch_assoc($pubs)) {
        $existing_publications[] = $row;
    }  
    
    $willies = json_encode($existing_publications);
    // 检查JSON编码是否失败
    if ($willies === false) {
        die(json_encode(['error' => json_last_error_msg()]));
    }
    
    // 设置响应头,明确告诉浏览器这是UTF-8编码的JSON
    header('Content-Type: application/json; charset=utf-8');
    echo $willies;
    // 结尾不要加?>,避免额外输出空白
    
  • 显示空格、HTML或报错信息:说明PHP文件有额外输出(比如<?php标签前的空格、之前代码的echo语句、PHP警告),需要彻底清理这些内容,确保文件仅输出JSON字符串。

第二步:修复JavaScript的错误处理逻辑

当前JS的else分支引用未定义的error变量,且缺少解析失败的捕获逻辑,修改后更便于排查:

function WORK(){
    var xhr = new XMLHttpRequest();
    var url = "/shoba/publications.php";
    
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            // 先打印原始响应内容,直观排查问题
            console.log('响应内容:', xhr.responseText);
            if (xhr.status == 200) {
                try {
                    var data = JSON.parse(xhr.responseText);
                    console.log(data, "success");
                } catch (e) {
                    console.log('JSON解析失败:', e.message);
                }
            } else {
                console.log('请求失败,状态码:', xhr.status);
            }
        }
    };
    xhr.open("GET", url, true);
    xhr.send();
    alert("reached function end");
}

用try-catch包裹解析逻辑,能精准定位解析失败的细节;打印响应文本则可以直接看到PHP返回的内容是否符合预期。

第三步:确保字符编码一致

字符编码不匹配会导致json_encode失败或输出乱码:

  • 数据库连接后添加字符集设置:$conn->set_charset('utf8mb4');(支持中文、emoji等特殊字符)
  • 页面HTML头部添加<meta charset="UTF-8">
  • 保持PHP输出的编码与页面一致(已在第一步通过header设置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:35:30