2012-02-15 46 views
0

我想知道是否有人可以提出一種替代方法來解決以下問題。從ajax成功處理PDF結果數據

我有一個web應用程序,它爲PDF創建一個http請求。爲了更好地控制這個問題,PDF可能會比服務器端創建的請求的默認超時時間長,所以我使用了ajax,而之前只是使用了window.open。

但是,由於PDF是如何準備的,創建它的請求也會返回它。我無法找到一種方法來處理返回的二進制PDF數據,所以我簡單地在瀏覽器緩存中重新存儲數據。然後再次請求相同的網址,但使用window.open。

這種情況的代碼如下..

function loadPdf(url, timeout){ 
    $.ajax({ 
    url: url, 
    success: function(data){ 
     window.open(url); 
    }, 
    error: function(error, status){ 
     window.alert("Problem retrieving PDF.\nThe error status is: " + status); 
    }, 
    timeout: timeout, 
    dataType: "application/pdf" 
    }); 
} 

真的是我想要做的是在詢問用戶打開/保存PDF的方式處理數據的成功。我真的不喜歡用這種方式使用window.open,尤其是像這樣的重複調用。

+0

也許與iframes的東西? – Oliver 2012-02-15 10:47:05

+0

這是我曾考慮過的事情,也可能是前進的一種選擇。 – Jeremy 2012-02-24 11:31:37

回答

2

真的是我想要做的是在詢問用戶打開/保存PDF

這是不可能的方式 處理成功的數據。你不應該使用AJAX來下載文件。對於在success回調中檢索的字節數組,您無法做任何有用的操作。您不能直接將其保存在客戶端計算機上(出於顯而易見的原因),也不能通過「保存」對話框提示用戶。

您也不需要使用window.open。你可以簡單地提供一個鏈接到文件:

<a href="/somescript">download pdf</a> 

,然後在服務器上指定:Content-Disposition: attachment; filename="test.pdf"自定義HTTP標頭,以顯示保存對話框,允許用戶將自己的計算機上指定一個位置來存儲文件。

+0

我已經改進了內容處理更改服務器端。我目前不能使用鏈接,但我打算嘗試代碼重構來實現這一點。我目前不知道如何通過鏈接處理超時值,這實際上是主要問題。也只是爲了澄清,我從來沒有打算將數據保存到用戶電腦,我正在談論你在你的答案中提到的默認對話框。 – Jeremy 2012-02-24 11:27:32