AJAX获取Base64格式PDF后无法正常显示的问题排查
问题分析与解决方案
核心问题在于jQuery AJAX默认会根据响应头自动解析数据,导致你拿到的data并非接口返回的原始Base64纯文本;同时你对已经是Base64格式的字符串再次执行Base64.encode(),造成双重编码,最终生成的PDF自然无法正常显示。
修正步骤:
- 强制AJAX以纯文本形式接收响应,添加
dataType: 'text'参数,阻止jQuery自动解析数据 - 移除多余的
Base64.encode()调用,直接使用接口返回的原始Base64字符串拼接PDF的Data URI
修正后的代码:
$.ajax({ type: "POST", url: "/download", data: JSON.stringify(postData), contentType: "application/json", encode: true, dataType: 'text' // 关键:强制接收纯文本 }) .done(function (data) { // 直接使用原始Base64字符串,无需再次编码 window.open("data:application/pdf;base64," + data); }) .fail(function (err) { $('.toast-header strong').html('Download Error'); $('.toast-body').html('An error occured while downloading the file.'); let toast = new bootstrap.Toast($('#liveToast')); toast.show(); });
补充说明:
console.log(data)显示内容与API响应不一致,正是因为jQuery默认根据响应头(比如Content-Type)对数据做了解析(例如当成JSON解析),设置dataType: 'text'后,就能拿到和接口响应完全一致的纯文本Base64字符串,此时直接用于生成PDF即可正常显示。
内容的提问来源于stack exchange,提问作者Amit Pathak
相关产品推荐
相关产品推荐

