在ajax调用后将pdf发送到浏览器

时间:2012-03-25 11:21:35

标签: php javascript ajax

我有一个通过ajax调用调用的php脚本。值将发送到此脚本以构建pdf。我想将pdf发送到浏览器,但由于构建pdf的脚本返回到带有javascript的页面,我无法看到如何执行此操作。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您可以使用iframe而不是ajax请求并强制下载pdf文件。

答案 1 :(得分:2)

我会推荐一些不同的东西。而不是AJAX调用重定向到这样的URL:

./path_to_pdf_script/script.php?param1=val1&param2=val2

这个脚本将是生成pdf的脚本。将脚本置于脚本顶部的这个标题:

header('Content-type: application/pdf');

简单地echo pdf内容所在的字符串。如果您希望用户下载此pdf而不是查看,您可以使用找到HERE的示例进行AJAX调用:

  

来自php.net

     

如果您希望系统提示用户保存您要发送的数据,   例如生成的PDF文件,您可以使用»Content-Disposition   标头提供推荐的文件名并强制浏览器   显示保存对话框。

<?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');
?>

答案 2 :(得分:1)

正如您所注意到的,您的AJAX调用无法直接将PDF输出到浏览器。一种解决方法是删除AJAX并将用户直接发送到生成PDF的页面。这种方法非常常见并且有很好的记录。但是有一种方法可以使用AJAX生成PDF,这样用户就可以保留在网页上,直到文件准备就绪。

您的AJAX调用可以使用带有2个独占字段的JSON对象进行回答:

  • “pdfurl”如果pdf文件已成功创建并写入磁盘,
  • 如果出现错误,
  • “errormsg”。

像(在PHP中):

<?php
//...
if (writepdf($filename, ...)) {
    $result = array('pdfurl' => '/files/' . $filename);
} else {
    $result = array('errormsg' => 'Error!');
}
echo json_encode($result);

然后页面的javascript可以包含(jQuery示例):

$.ajax({
    type: "GET",
    url: "ajaxcreatepdf.php",
    data: {userid: 1},
    dataType: "json",
    success: function(data, textStatus) {
        if (data.pdfurl) {
            window.location.href = data.pdfurl;
        }
        else {
            $("#messagebox").html(data.errormsg);
        }
    }
});

答案 3 :(得分:0)

Ajax请求对用户不是直接可见的,因此重定向没有意义

您需要在返回ajax后将此PDF加载到现有或新的浏览器窗口中。