我想要做的是通过jQuery的$ .get方法调用HTTPHandler,它将流回PDF并使用对象元素在网页中显示它。我之前设置IFrame的src属性的方法是处理程序调用的结果,但我希望跨浏览器完成通知,所以已经转移到使用$ .get()。示例代码:
function buttonClick() {
$.get("/PDFHandler.ashx", {},
function(data, textStatus, XMLHttpRequest) {
var pdfObjectString = "<object data='' type='application/pdf' width='600' height='600'></object>";
var pdfObject = $(pdfObjectString);
pdfObject.attr("data", data);
$("#container").append(pdfObject);
});
如您所见,我试图将'data'变量粘贴到object元素中。这不起作用(没有错误,PDF只是不显示),可能是因为返回的数据是二进制的,但是attr()方法需要一个字符串(我认为)。
我的问题是:如何通过$ .get调用HTTPHandler并以某种方式将回调中的数据分配给对象的data属性?
答案 0 :(得分:0)
基于这个问题:How to open a file using JavaScript?我能够找到解决方案。基本上,您在成功回调函数中再次调用处理程序。我无法使用<object>
标记(仍使用IFrame),但它足以满足我的需求。
为此,HTTP处理程序必须缓存结果,否则只会再次调用。
答案 1 :(得分:0)
我已经挣扎了几个小时才有这样的工作,这是我非常简单的解决方案,完美无缺:
<div id = "divpayframe">
<iframe name="payframe" id="payframe" width="600" height="800" frameborder="0"></iframe>
</div>
<form id="frmpayslip" method="post" action="/payslip" target="payframe">
服务器返回pdf流并将响应内容类型设置为application / pdf。见下面的代码(用Delphi编写)
无功 S:TMemoryStream;
//某些代码在服务器端生成pdf文件并将其转换为pdf文件流 //将流分配给变量S并设置Response以返回流
Response.ContentType:='application / pdf'; Response.SendStream(S);
请注意,除非您希望将其作为附件发送,否则不需要自定义标头,在这种情况下,您可以发送“内容处置”,“附件”; filename =“payslip.pdf”'以获得相同的结果。