2017-01-13 72 views
0

當我想在iframe中顯示PDF時(使用src屬性),我遇到了問題。從不從瀏覽器下載PDF。 我需要在某些情況下使用ajax調用來在彈出窗口中顯示消息。 生成PDF的servlet的代碼有效,因爲目前我們直接在iframe的src屬性中使用該代碼。如何使用ajax在調用servlet後在iframe中顯示PDF

<iframe src="myServlet" /> 

但是,當我使用servlet用Ajax調用,我想添加在iframe PDF的內容,這是行不通的。 我不知道爲什麼。 這是JS的示例:

$.ajax(
{ 
    url: "myServlet", 
    ... 
    complete: function(data) { 
     var blob = new Blob([data], { type: 'application/pdf' }); 
     var downloadUrl = URL.createObjectURL(blob); 
     $('#myframe').attr("src", downloadUrl); 
    } 
} 
); 

我嘗試用鉻和我有錯誤: 的jquery-2.1.3.js TS = 13012017:3 GET數據:應用/ PDF; BASE64,一滴:http://localhost:8180/d21d82b6-8254-4a38-907e-129b3ac037fa淨:: ERR_INVALID_URL

我可以看到,我有數據爲二進制文件: %PDF-1.4% 0 OBJ <>流 X {PU ^A e ( ...................... ................... 開始xref %% EOF

對不起,我沒有這裏的代碼(在家裏),但我認爲解釋是相當清楚的。 我不知道爲什麼如果我使用iframe和attribut src使用ajax,PDF無法下載。 你有想法嗎?

謝謝。 Fred

回答

0

這對我有用。

$.ajax(
{ 
    url: "myServlet", 
    ... 
    complete: function(data) { 
     $('#myframe').attr('src','data:application/pdf;base64,'+data); 
    } 
} 
); 

此外,您應該編碼AJAX ANS這樣base64_encode($data)

我希望你覺得這有幫助。

0

在Javascript中,編碼ajax的答案,你應該這樣來做:

var enc = btoa(data) 

如果你有問題,你應該試試這個:

var enc = btoa(unescape(encodeURIComponent(data))) 

然後

$('#myframe').attr('src','data:application/pdf;base64,'+ enc);