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

Ajax POST请求本地正常,网站部署后出现JSON解析错误

问题:Autocomplete功能部署后JSON.parse抛出"Unexpected end of JSON input"错误

问题详情

开发化合物搜索项目时,搜索栏的autocomplete功能在本地运行正常,但部署到线上网站后,在AJAX请求的onreadystatechange阶段执行JSON.parse()时触发以下错误:

Uncaught SyntaxError: Unexpected end of JSON input

前端核心代码

function handleAutocomplete(inputElement) {
    const ajaxReq = new XMLHttpRequest();
    ajaxReq.onreadystatechange = function() {
        if (this.readyState === 4 && this.status === 200) {
            try {
                const autocompleteData = JSON.parse(this.responseText);
                // 渲染候选列表逻辑
            } catch (err) {
                console.error('JSON解析失败:', err);
            }
        }
    };
    const query = encodeURIComponent(inputElement.value.trim());
    ajaxReq.open('GET', `process_data.php?query=${query}`, true);
    ajaxReq.send();
}

后端process_data.php代码

<?php
header('Content-Type: application/json');
$dbConn = mysqli_connect('localhost', 'prod_user', 'prod_pass', 'compound_db');

if (!$dbConn) {
    die(json_encode(['error' => '数据库连接失败']));
}

$searchQuery = isset($_GET['query']) ? $_GET['query'] : '';
$results = [];

$sql = "SELECT compound_name FROM compounds WHERE compound_name LIKE ? LIMIT 8";
$stmt = $dbConn->prepare($sql);
$likePattern = "%{$searchQuery}%";
$stmt->bind_param('s', $likePattern);
$stmt->execute();
$resultSet = $stmt->get_result();

while ($row = $resultSet->fetch_assoc()) {
    $results[] = $row['compound_name'];
}

echo json_encode($results);
$stmt->close();
mysqli_close($dbConn);
?>

已尝试的调试操作

  • 调整前端错误捕获逻辑,新增console.log输出响应内容
  • 修改后端SQL过滤规则,优化模糊匹配的边界条件
  • 验证前端请求参数的编码方式,确保特殊字符被正确转义

调试关键信息(截图总结)

  • AJAX请求状态码为200,但responseText为空字符串
  • 本地环境中相同请求能返回完整的JSON数组

排查建议

  1. 直接验证后端输出
    在线上环境直接访问process_data.php?query=test(替换为实际测试关键词),查看返回内容是否为合法JSON。如果返回PHP错误信息(比如数据库连接失败、语法报错),说明后端代码存在环境兼容问题。

  2. 检查PHP错误日志
    查看服务器的PHP错误日志,确认是否有未捕获的错误导致输出中断(比如数据库权限不足、SQL语法在生产环境不兼容)。

  3. 明确响应编码
    修改后端的Content-Type头,明确指定UTF-8编码:

    header('Content-Type: application/json; charset=utf-8');
    

    避免因字符编码问题导致JSON输出异常。

  4. 验证请求参数传递
    检查服务器是否存在URL重写规则,导致$_GET['query']参数丢失。可在后端新增日志输出:

    error_log('Received query: ' . $searchQuery);
    

    确认参数是否正确接收。

  5. 检查服务器PHP版本
    对比本地与线上的PHP版本,若线上版本过低,可能不支持mysqli_stmt::get_result()等语法,需替换为兼容写法(比如用mysqli_stmt::bind_result())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:24:59