从ajax帖子下载pdf

时间:2012-05-02 07:56:50

标签: php jquery pdf content-type

我想通过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保存到我的电脑,但这不起作用。

有人知道如何解决这个问题吗?

提前致谢!

4 个答案:

答案 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上,但这是一个安全风险,因此是另一个话题。