2017-01-13 74 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);