javascript - 处理ajax成功的PDF结果数据

标签 javascript ajax pdf-generation

我想知道是否有人可以提出以下解决方法的替代方法。

我有一个 Web 应用程序,可以发出 PDF 的 http 请求。 PDF 可能需要超过服务器端创建请求的默认超时时间,因此为了更好地控制这一点,我使用了 ajax,而之前只使用了 window.open。

但是,由于 PDF 的准备方式,创建它的请求也会返回它。我无法找到处理返回的二进制 PDF 数据的方法,因此我只是依靠浏览器缓存来存储数据。然后只需再次请求相同的 url,但使用 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,尤其是像这样的重复调用。

最佳答案

Really what I would like to do is handle the success data in a way that asks the user to open/save the PDF

这是不可能的。您不应该使用 AJAX 来下载文件。您无法对在 success 回调中检索到的字节数组执行任何有用的操作。您不能直接将其保存在客户端计算机上(出于显而易见的原因),也不能通过“保存”对话框提示用户。

您也不需要使用window.open。您只需提供该文件的链接即可:

<a href="/somescript">download pdf</a>

然后在服务器上指定:Content-Disposition:附件; filename="test.pdf" 自定义 HTTP header ,用于显示保存对话框,允许用户指定计算机上存储文件的位置。

关于javascript - 处理ajax成功的PDF结果数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291870/

相关文章:

javascript - 在哪里/何时设置函数原型(prototype)?

javascript - 对象不可迭代 - NodeJS

javascript - 在我的 jQuery 中,为什么 indexOf 没有从我的数组中找到键?

javascript - 下拉菜单在 iPad 上不起作用

php - FB JavaScript 中的 SQL 查询

jquery - 学习如何在 asp.net mvc 中使用 ajax 的资源?

c# - 使用 itextsharp 将 html 生成为 pdf

php - magento-警告: require_once(app/Mage.php): failed to open stream: No such file or directory

html - 如何在使用 css 自动分页后创建上边距?

python - 使用reportlab python库生成孟加拉语PDF