Php 在ajax调用后将pdf发送到浏览器
我有一个通过ajax调用的php脚本。将值发送到此脚本以生成pdf。我想将pdf发送到浏览器,但由于生成pdf的脚本返回到带有javascript的页面,我看不出如何执行此操作。有什么想法吗?您可以使用iframe而不是ajax请求,并强制下载pdf文件。ajax请求对用户不直接可见,因此重定向没有任何意义Php 在ajax调用后将pdf发送到浏览器,php,javascript,ajax,Php,Javascript,Ajax,我有一个通过ajax调用的php脚本。将值发送到此脚本以生成pdf。我想将pdf发送到浏览器,但由于生成pdf的脚本返回到带有javascript的页面,我看不出如何执行此操作。有什么想法吗?您可以使用iframe而不是ajax请求,并强制下载pdf文件。ajax请求对用户不直接可见,因此重定向没有任何意义 在ajax返回后,您需要将此PDF加载到现有或新的浏览器窗口中。我建议使用一些不同的方法。代替AJAX调用,重定向到URL,如下所示: ./path_to_pdf_script/script
在ajax返回后,您需要将此PDF加载到现有或新的浏览器窗口中。我建议使用一些不同的方法。代替AJAX调用,重定向到URL,如下所示:
./path_to_pdf_script/script.php?param1=val1¶m2=val2
这个脚本就是生成pdf的脚本。将此标题放置在脚本顶部的某个位置:
header('Content-type: application/pdf');
只需echo
pdf内容所在的字符串。如果希望用户下载此pdf而不是查看,则可以使用以下示例执行AJAX调用:
来自php.net
如果希望提示用户保存正在发送的数据,
如生成的PDF文件,您可以使用»内容处置
标头以提供建议的文件名并强制浏览器
显示“保存”对话框
<?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');
?>
正如您所注意到的,AJAX调用无法直接将PDF输出到浏览器。一种解决方法是删除AJAX并将用户直接发送到生成PDF的页面。这种方法非常常见,并且有很好的文档记录。但是有一种方法可以使用AJAX生成PDF,这样用户就可以一直呆在网页上,直到文件准备好 您的AJAX调用可以使用带有2个独占字段的JSON对象进行响应:
- “pdfurl”如果pdf文件已成功创建并写入磁盘
- 如果有错误,请输入“errormsg”
您是否尝试过在AJAX调用中发送重定向头?如果我没记错的话,它会重定向浏览器,即使只是AJAXNo,因为我觉得这很奇怪。根据ajax重定向需要进行编程,考虑到您正在运行两个ajax调用。两者都执行重定向。谁应该赢?所有这些都是发送pdf文件的常用方式,我认为这可能是处理问题的首选方式,但它不能回答问题。如果PDF是在网页的后台通过AJAX生成的,那么如何在文件准备好后才发送文件?是的,你是对的,因为可能一些临时文件会起作用,AJAX调用PDF生成器,生成PDF并将其保存到临时文件,将PDF文件保存到会话,将ok发送回客户端,然后从那里重定向到一个pdf服务器脚本,该脚本从会话中获取文件名,读取文件名,提供文件名并将其删除
<?php
//...
if (writepdf($filename, ...)) {
$result = array('pdfurl' => '/files/' . $filename);
} else {
$result = array('errormsg' => 'Error!');
}
echo json_encode($result);
$.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);
}
}
});