【问题标题】:Handling PDF result data from ajax success处理来自ajax成功的PDF结果数据
【发布时间】:2012-02-15 10:44:32
【问题描述】:

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

我有一个对 PDF 发出 http 请求的 Web 应用程序。 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,尤其是作为这样的重复调用。

【问题讨论】:

  • 也许有 iframe 的东西?
  • 这是我考虑过的事情,可能是未来的一个选择。

标签: javascript ajax pdf-generation


【解决方案1】:

我真正想做的是以某种方式处理成功数据 要求用户打开/保存 PDF

那是不可能的。您不应该使用 AJAX 来下载文件。您不能对在success 回调中检索到的字节数组做任何有用的事情。您不能直接将其保存在客户端计算机上(原因很明显),也不能通过“保存”对话框提示用户。

您也不需要使用window.open。您可以简单地提供该文件的链接:

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

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

【讨论】:

  • 我已经做了 Content-Disposition 更改服务器端,这改进了一些事情。我目前不能只使用链接,但我计划尝试代码重构以使其成为可能。我目前不知道如何通过链接处理超时值,这确实是主要问题。还要澄清一下,我从未打算将数据保存到用户电脑上,我说的是您在回答中提到的默认对话框。
【解决方案2】:

jquery.fileDownload 插件可以满足您的需求吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多