我想通过jquery帖子下载pdf文件。我试过这个:
$('#downloadPdf').click(function() {
var id = $('#fileId').val();
$.ajax({
type: "POST",
url: "includes/download_pdf.php",
data: 'file_id=' + id,
complete: function(data) {
$('#pdf_results').html(data.responseText);
}
});
});
代码PHP:
<?php
$file_name = $_POST['file_id'];
// We'll be outputting a PDF header('Content-type: application/pdf');
// It will be called downloaded.pdf header('Content-Disposition: attachment; filename="'.$file_name.'.pdf"');
// The PDF source is in original.pdf readfile('/var/www/vhosts/domain.nl/private/'.$file_name.'.pdf');
?>
当我使用此代码时,我会在#pdf_results
中看到所有奇怪的符号。我想将PDF保存到我的电脑,但这不起作用。
有人知道如何解决这个问题吗?
提前致谢!
答案 0 :(得分:1)
您不需要为此使用AJAX。尝试使用这样的东西:
$(function(){
$('#downloadPdf').click(function(){
var id = $('#fileId').val();
window.open(location.protocol + '//' + location.hostname + '/includes/download_pdf.php?file_id=' + id);
return false;
});
});
干杯!
答案 1 :(得分:1)
这里不需要ajax。
尝试使用Rory McCrossan的解决方案: POST to server, receive PDF, deliver to user w/ jQuery
使用插件或只是链接到文件并确保您的服务器发送正确的标头(否则您可以使用php读取文件并从那里输出:http://www.saschakimmel.com/2009/05/php-prompt-the-user-to-download-a-specific-file/)
答案 2 :(得分:1)
在页面上隐藏<iframe/>
,并创建一个包含<form>
属性的method="POST" action="includes/download_pdf.php" target="name_of_the_iframe"
,在其中添加<input type="hidden" name="file_id" value="the_value"/>
,然后提交。
以上所有内容都可以在JavaScript中完成,无需将这种标记放入页面,以保持清洁。这些都不是ajax。
答案 3 :(得分:1)
你需要实现这个目标: 我并没有真正追踪你的程序,但是你需要在你的php中使用内容处理这一行来使它工作。
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
**header('Content-Disposition: attachment; filename="downloaded.pdf"');**
// The PDF source is in original.pdf
readfile('original.pdf');
?>
查看手册here
此外,您可以将文件移到iframe上,但这是一个安全风险,因此是另一个话题。