我有一個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. 將pdf從wp_remote_get發送到瀏覽器
- 2. Asp.Net發送PDF到瀏覽器
- 3. 停止瀏覽器發送自動AJAX調用
- 4. 發送Ajax調用beforeUnload被瀏覽器取消
- 5. 使用HttpWebRequest發送HTML到瀏覽器
- 6. 瀏覽器刷新發送最後$ HTTP調用由
- 7. PDFKit:將生成的PDF發送到瀏覽器,但不保存
- 8. 編輯PDF iTextSharp的並且發送到瀏覽器
- 9. Ajax調用發送後
- 10. 發送OutputStream到瀏覽器並讓瀏覽器保存它
- 11. 如何在webrtc中發送短信瀏覽器到瀏覽器?
- 12. jQuery ajax,在瀏覽器中打開PDF
- 13. ajax調用在Chrome瀏覽器,Firefox但不在IE瀏覽器?
- 14. TCPServer發送html到瀏覽器
- 15. 發送Javascript代碼到瀏覽器
- 16. 從瀏覽器發送消息到SQS
- 17. 發送「Enter」鍵到瀏覽器窗口
- 18. 發送數據到瀏覽器
- 19. 如何發送pushnotifications到Firefox瀏覽器?
- 20. 發送瀏覽器cookie到Web服務
- 21. 發送文本到瀏覽器
- 22. 我想發送變量到R然後R發送圖像到瀏覽器
- 23. 發送瀏覽器響應
- 24. Ajax調用被瀏覽器取消
- 25. SWT瀏覽器 - 檢測AJAX調用
- 26. ajax調用document.ready阻止瀏覽器
- 27. 使用ajax調用時瀏覽器的後退麻煩
- 28. 從C#後端發送腳本到瀏覽器
- 29. 發送二進制流到瀏覽器,然後更新頁面
- 30. 如何通過Java Web應用程序將PDF發送到瀏覽器?
所有這些都是發送PDF文件的常用方式,我認爲它可以成爲處理問題的首選方式,但它並不回答這個問題。如果PDF是通過AJAX生成的,在網頁的後臺,那麼只有在準備好後才能發送文件? – 2012-03-25 15:59:01
是的,你的權利,因爲這可能是一些臨時文件會做的伎倆,ajax調用去PDF生成器,它生成PDF並將其保存到臨時文件,保存PDF文件名會話,發送回客戶端,和從那裏重定向到一個從會話中獲取文件名的pdf服務器腳本,讀取它,提供並刪除它 – SinistraD 2012-03-25 19:08:54