我想在浏览器中显示pdf ajax响应。问题是我无法直接打开网址,因为pdf是动态创建的,我该如何显示它。
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
processData: false,
contentType: "application/json; charset=UTF-8",
complete: function (response) {
console.log(response);
window.open("pdf.php","_blank");
}
});
PDF回复
%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 1265>>
PHP代码
header('Cache-Control: public');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="new.pdf"');
header('Content-Length: ' . strlen($data));
echo $data;
应该感谢任何帮助。
答案 0 :(得分:0)
将此内容放入pdf.php
header("Content-type: application/pdf");
答案 1 :(得分:0)
我遇到了这个问题,我会给你解决方案......我希望它能解决你的问题。
当您致电您的服务时,您应该要求 dataType: 'binary'
回复。然后,使用 saveAs
(FileSaver.js) 触发下载。
但是,$.ajax 不允许您下载开箱即用的二进制内容,它会尝试从 UTF-8 解码您的二进制文件并破坏它。要么使用jQuery插件来解决这个问题jquery.binarytransport.js
示例:
$.ajax({
type: "POST",
url: $("form#data").attr("action"),
data: formData,
dataType: 'binary', //--> using jquery.binarytransport.js
success: function (response) {
// Default response type is blob
saveAs(response, "test.pdf"); //--> using FileSaver.js
}
});
好看! :)