我有一个PHP脚本,通过ajax调用被调用。值被发送到这个脚本来建立一个pdf。我想将pdf发送到浏览器,但是由于构建pdf的脚本返回到带有JavaScript的页面,所以我无法看到如何执行此操作。有任何想法吗?ajax调用后发送PDF到浏览器
回答
我会推荐一些有点不同。而不是AJAX呼叫重定向到这样一个URL:
./path_to_pdf_script/script.php?param1=val1¶m2=val2
这个脚本将生成的PDF。某处放置在脚本的顶部这个头:
header('Content-type: application/pdf');
,只需echo
字符串PDF内容是如果你希望用户下载该PDF,而不是看你可以做AJAX调用与发现的例子HERE:
从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'); ?>
您可以使用iframe而不是ajax请求并强制下载pdf文件。
Ajax请求不是直接可见的用户,所以一个重定向是毫无意义的
您需要的Ajax返回后,这个PDF加载到现有或新的浏览器窗口。
您是否尝试过在发送一个AJAX重定向头打电话?如果我记得它会重定向浏览器,即使这只是AJAX – SinistraD 2012-03-25 11:28:00
不,因为我认为这很奇怪。根据http://stackoverflow.com/questions/2927044/redirect-on-ajax-jquery-call ajax重定向需要编程 – 2012-03-25 11:38:23
考虑你有两个Ajax调用运行。两者都做重定向。谁应该赢? – 2012-03-25 11:39:50
当你发现,你的AJAX调用不能直接输出PDF的浏览器。一种解决方法是删除AJAX并将用户直接发送到生成PDF的页面。这种方法非常常见并且有据可查。但是有一种方法可以使用AJAX生成PDF,以便用户可以保持在网页上,直到文件准备就绪。
你的AJAX调用可以回答一个JSON对象有2个专属领域:
- “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);
}
}
});
- 1. Asp.Net发送PDF到浏览器
- 2. 使用HttpWebRequest发送HTML到浏览器
- 3. PDFKit:将生成的PDF发送到浏览器,但不保存
- 4. Ajax调用发送后
- 5. 发送OutputStream到浏览器并让浏览器保存它
- 6. jQuery ajax,在浏览器中打开PDF
- 7. ajax调用在Chrome浏览器,Firefox但不在IE浏览器?
- 8. 发送“Enter”键到浏览器窗口
- 9. TCPServer发送html到浏览器
- 10. 发送浏览器cookie到Web服务
- 11. 从浏览器发送消息到SQS
- 12. 发送Javascript代码到浏览器
- 13. 发送文本到浏览器
- 14. 发送数据到浏览器
- 15. HttpWebResponse发送到网络浏览器?
- 16. 发送浏览器响应
- 17. ajax调用document.ready阻止浏览器
- 18. Ajax调用被浏览器取消
- 19. 使用ajax调用时浏览器的后退麻烦
- 20. 发送二进制流到浏览器,然后更新页面
- 21. 从C#后端发送脚本到浏览器
- 22. 如何通过Java Web应用程序将PDF发送到浏览器?
- 23. AJAX调用控制器后显示PDF
- 24. Ajax的Listview调用刷新浏览器后未更新
- 25. CodeIgniter/Ajax - 发送后值到控制器
- 26. IE浏览器不在jQuery中触发ajax调用
- 27. AJAX发送POST时,浏览器无法获取
- 28. 显示*浏览器*加载指示器(如发生回发时)ajax调用
- 29. AJAX和浏览器后退按钮
- 30. 浏览器后退按钮Ajax
所有这些都是发送PDF文件的常用方式,我认为它可以成为处理问题的首选方式,但它并不回答这个问题。如果PDF是通过AJAX生成的,在网页的后台,那么只有在准备好后才能发送文件? – 2012-03-25 15:59:01
是的,你的权利,因为这可能是一些临时文件会做的伎俩,ajax调用去PDF生成器,它生成PDF并将其保存到临时文件,保存PDF文件名会话,发送回客户端,和从那里重定向到一个从会话中获取文件名的pdf服务器脚本,读取它,提供并删除它 – SinistraD 2012-03-25 19:08:54