我有一个通过ajax调用调用的php脚本。值将发送到此脚本以构建pdf。我想将pdf发送到浏览器,但由于构建pdf的脚本返回到带有javascript的页面,我无法看到如何执行此操作。有什么想法吗?
答案 0 :(得分:2)
您可以使用iframe而不是ajax请求并强制下载pdf文件。
答案 1 :(得分:2)
我会推荐一些不同的东西。而不是AJAX调用重定向到这样的URL:
./path_to_pdf_script/script.php?param1=val1¶m2=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对象进行回答:
像(在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加载到现有或新的浏览器窗口中。