我正在尝试使用AJAX查询PHP文件并向用户显示PDF文件。 PHP文件的响应是存储在我的服务器上的PDF文件的原始数据。下面是我用来尝试完成此操作的代码,但它不起作用。我一直在浏览器中收到错误请求错误。有谁知道这样做的正确方法?
我的最终目标是我不希望用户能够看到我存储PDF文件的服务器路径。我只想使用AJAX / PHP脚本访问PDF文件。我知道这不是最安全的方法,但我只想让外行远离我的PDF文件。
$.ajax({
type: "POST",
url: 'process.php',
data: {"name" : "value"},
success: function (data) {
var json = $.parseJSON(data);
if(json.hasOwnProperty('success')){
window.location(json.success);
// json.success should contain the pdf binary data
// i just cant figure out how display the pdf in the browser
}
}
});
<?php
$fileName = $_POST['name'];
if(isset($fileName)){
$file = './path-to-forms/'.$fileName.'.pdf';
$pdfData = file_get_contents($file);
$data = array("success" => $pdfData, "name" => $fileName);
echo json_encode($data);
}
?>
答案 0 :(得分:2)
有谁知道这样做的正确方法?
一些更改应该正确下载文件:
更新PHP代码以使用base-64编码发送文件内容(即使用base64_encode()):
$data = array("success" => base64_encode($pdfData));
当AJAX响应完成时,创建一个锚点(链接)并使用.click()模拟单击它以启动PDF下载。我在api.jquery.com上找不到任何jQuery方法window.location()
...如果你找到它,请告诉我。也许您正在考虑更新(只读)属性window.location?
var json = $.parseJSON(data);
if(json.hasOwnProperty('success')){
var a = document.createElement("a");
a.href = 'data:application/pdf;base64,'+json.success;
a.download = "filePDF"; //update for filename
document.body.appendChild(a);
a.click();
// remove `a` following `Save As` dialog,
// `window` regains `focus`
window.onfocus = function () {
document.body.removeChild(a)
}
}
来自guest虚拟机271314,来自this answer的改编代码以及来自answer below that的Alexandre代码的部分代码。
在this phpfiddle中看到它。