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

AJAX请求生成FPDF字符串后返回JSON出现语法错误如何解决

问题原因
  1. 封装的createProgramAndInvoicePdf方法传参'S'时未严格遵循只返回PDF字符串的逻辑,方法内部存在直接输出PDF内容的代码(例如误调用FPDF的Output('I')/Output('D')方法、多余的echo/print逻辑),导致PDF内容先被写入响应体。
  2. 后端输出JSON前未清理已产生的输出内容,也未终止后续多余输出,最终响应体为「PDF二进制内容 + JSON字符串」的混合格式,前端指定dataType: "json"后解析响应时,第一个字符为PDF开头标识%,不符合JSON格式要求,直接抛出解析错误。
解决方法
  • 优先排查FPDF封装方法逻辑:确认传参'S'时仅将PDF内容作为返回值返回,移除所有直接输出内容的逻辑,FPDF原生Output('S')方法本身不会产生直接输出,重点检查封装层的多余输出代码。
  • 输出JSON前添加缓冲区清理与响应头设置,修改返回代码如下:
// 清空之前所有输出内容
ob_clean();
// 声明JSON格式响应头
header('Content-Type: application/json; charset=utf-8');
$data[] = [
    STATUS => $checkAll,
    CHECK_FIRSTNAME => $checkFirstname,
    CHECK_LASTNAME => $checkLastname,
];
echo json_encode($data);
// 终止后续所有输出
exit;
  • 若业务需要同时返回PDF文件,可将PDF字符串转base64编码后放入JSON字段中返回,示例如下:
ob_clean();
header('Content-Type: application/json; charset=utf-8');
$data[] = [
    STATUS => $checkAll,
    CHECK_FIRSTNAME => $checkFirstname,
    CHECK_LASTNAME => $checkLastname,
    'invoice_pdf' => base64_encode($invoice)
];
echo json_encode($data);
exit;

前端拿到返回值后可直接使用base64内容完成PDF预览、下载等操作。

内容的提问来源于stack exchange,提问作者m.Sarto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:18:03