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

AJAX解析PHP API大JSON响应遇转义字符错误求助

解决方案:AJAX解析含印地语字符的大体积JSON失败

针对你遇到的「返回100条以上含印地语字符的记录时,JSON解析出现转义字符错误,且响应存在垃圾/空字符」的问题,按以下步骤排查解决:

1. 修正PHP端JSON输出的核心配置

(1)确保输出无冗余内容且字符编码正确

在PHP脚本开头添加缓冲清理和响应头设置,避免多余输出(如空格、BOM头)干扰JSON结构:

<?php
ob_clean(); // 清空所有前置输出缓冲
header('Content-Type: application/json; charset=utf-8'); // 明确响应类型为UTF-8编码的JSON

// 数据库查询逻辑...

// 构造响应数组
$response = [
    'message' => 'Data retrieved successfully.',
    'status' => '1',
    'currentPage' => '1',
    'totalPages' => '4',
    'data' => $fetched_data
];

// 编码JSON时保留Unicode字符(避免印地语被转义为\uXXXX,减少转义错误概率)
$json_output = json_encode($response, JSON_UNESCAPED_UNICODE);

// 检查JSON编码是否出错
if (json_last_error() !== JSON_ERROR_NONE) {
    error_log('JSON编码错误: ' . json_last_error_msg());
    echo json_encode(['status' => '0', 'message' => '数据编码失败']);
    exit;
}

echo $json_output;
exit; // 强制终止脚本,避免后续冗余输出
?>

(2)修复PostgreSQL字符集问题

确保PHP与PostgreSQL连接时使用UTF-8字符集,避免数据库返回的印地语字符编码混乱:

  • 若使用PDO连接:
    $pdo = new PDO("pgsql:host=localhost;dbname=your_db;charset=utf8", $user, $pass);
    
  • 若使用pg_connect:
    $conn = pg_connect("host=localhost dbname=your_db user=$user password=$pass");
    pg_query($conn, "SET NAMES 'UTF8';");
    

2. 优化AJAX调用,避免手动解析错误

直接让jQuery自动处理JSON解析,无需手动调用JSON.parse,同时指定响应类型:

$.ajax({
    url: "api/getPrintReport.php",
    type: "POST",
    dataType: 'json', // 告诉jQuery预期接收JSON格式响应
    data: {
        fromDateLimit: dateVal,
        toDateLimit: dateVal1,
        reportType: selectedReportIndex,
        cadreCode: cadreCode,
        pageNo: startPageNo
    },
    success: function (json) { // 直接接收解析后的JSON对象
        if (json.status === "1")
        {
            // 业务逻辑处理
        }
        else {
            modalBox.modal('show');
            modalBoxMessage.html(json.message);
        }
    },
    error: function (jqXHR, textStatus, errorThrown) {
        modalBox.modal('show');
        modalBoxMessage.html(errorThrown);
    }
});

3. 排查输出缓冲与截断问题

错误提示出现在65529列(接近64KB),大概率是PHP输出缓冲配置导致的截断:

  • 修改php.ini中的output_buffering参数为Off,或设置更大的缓冲值(如655360即640KB)
  • 若无法修改php.ini,可在PHP脚本开头添加ob_start();强制开启自定义缓冲,避免分段输出导致的字符损坏

4. 清理数据库中的不可见字符

若数据库字段包含控制字符(如空字符、换行符),会导致JSON解析失败,可在查询时清理:

SELECT 
    regexp_replace(column_name, '[^[:print:]]', '', 'g') AS cleaned_column
FROM your_table;

该SQL会移除字段中的所有非打印字符,避免污染JSON结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:50:28