我想知道是否有人可以为下面的工作建议一种替代方法。
我有一个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 :(得分:2)
我真正想做的是以某种方式处理成功数据 要求用户打开/保存PDF
那是不可能的。您不应该使用AJAX来下载文件。您无法对在success
回调中检索到的字节数组执行任何有用的操作。您无法直接将其保存在客户端计算机上(出于显而易见的原因),也无法使用“保存”对话框提示用户。
您也不需要使用window.open
。您只需提供指向该文件的链接:
<a href="/somescript">download pdf</a>
然后在服务器上指定:Content-Disposition: attachment; filename="test.pdf"
自定义HTTP标头以显示保存对话框,允许用户在其计算机上指定存储文件的位置。
答案 1 :(得分:0)
jquery.fileDownload插件可以满足您的需求吗?