2012-09-05 46 views
2

我送與data:xmlContent-Type:text/xml一個jQuery Ajax請求並得到如下回應:jQuery的AJAX SOAP響應多PDF

--MIME_boundary 
Content-Type: text/xml; charset=utf-8 
Content-Transfer-Encoding: binary 
Content-ID: <SOAP-ENV:Envelope> 

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope> .............</SOAP-ENV:Envelope> 
--MIME_boundary 
Content-Type: application/pdf 
Content-Transfer-Encoding: binary 

.... pdf binary data ..... 

據我瞭解的效應初探是帶有附件的多...但我怎麼能分別提取soap部分和pdf原始數據部分,並使用二進制數據來構建這個pdf? Thanx任何幫助。

同時考慮也是這樣:http://www.w3.org/TR/SOAP-attachments#SOAPReferenceToAttachements

UPDATE: 後位的研究,大量的不同反應的總結有這對我產生了以下議題和問題:

  • 阿賈克斯 - jquery .ajax()函數 - 只處理text/xml響應,這就是爲什麼它不處理二進制數據(讀它的地方)。但是,如果我得到多部分 - >內容類型:應用程序/ pdf - >我得到它的二進制數據。
  • 可以將二進制數據轉換爲base64,然後使用html5數據: - >但是每個瀏覽器的行爲都與它有所不同。

現在,我的結論是:

  • 只是要一個Ajax請求,得到URL路徑,並通過使用window.location.href

直接從服務器下載文件正確的,如果我在這裏錯了:jQuery Ajax無法處理多部分MIME響應?

回答

0

AJAX使用UTF-8編碼,因此它不支持二進制數據傳輸。你需要Base64編碼你的二進制數據,然後在另一端解碼它。你需要相應地設置你的標題。

Content-Transfer-Encoding: base64 
Content-Description: somefile.pdf 
Content-Disposition: attachment; 
filename="somefile.pdf" 

....then your Base-64 data blob ... 
+0

Thanx爲您的答案,虐待牢記在心。但我實際上想知道如何提取肥皂反應的第二部分。因爲,使用jQuery .ajax()函數雖然它給了我上面提到的響應,但它會產生一個錯誤 - 也許是因爲它無法處理多部分響應? – owsata

+0

Ajax不適用於文件傳輸。 –