javascript - 优雅地处理 REST 服务器错误

标签 javascript jquery rest pdf

我有一个可以动态生成 PDF 的应用程序(通过 service/generatePdf 访问)。

它返回一个内容类型=“application/pdf”的 HTTP 响应,并将outputStream 设置为二进制内容。

根据业务规范,当用户单击按钮时,我们需要打开一个显示该 PDF 的新窗口/选项卡。

提交下面的表单,一切都在 Happy Path 上完美运行,其中的响应是一个实际的 PDF。

<form action="service/generatePdf" method="post" name="PdfForm" target="_blank">

但是,当由于某种原因无法生成 PDF 时,效果就不那么好了。例如,假设 HTTP 响应输出流为空。

想要能够做的是在第一页上显示一条漂亮的错误消息,而不是打开新窗口/选项卡。

但是似乎没有什么办法可以做到。您的选择似乎是

  • 返回有效的 PDF,或
  • 了解浏览器的 PDF 插件如何处理损坏的文件

我尝试过 jQuery、Ajax、jQuery Form Plugin , jQuery Download plugin插件,但似乎没有任何作用。

最佳答案

服务器应通过 HTTP 状态代码指示错误或成功(例如 200 = 正常,500 = 错误)。您可以使用 JQuery 在 REST 客户端中捕获此内容

$.ajax({
    url: 'service/generatedPDF',
    error: function(jqXHR, textStatus, errorThrown) {
        ... // show error message
    },
).done(function(data) {
    // data contains the PDF
}

最好在服务器上创建 PDF,将其放入临时存储中,并在响应中发送该 PDF 的 URL。一旦客户端下载了文件,或者在一定的下载之后,PDF 就会从商店中删除。

在这种情况下,您只需打开一个新窗口,其中包含从服务器收到的 URL。

如果服务器在初始请求中提供了 PDF,您可以将其转换为 Data URI并在新窗口中打开该数据 URI。

关于javascript - 优雅地处理 REST 服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018505/

相关文章:

jQuery 可排序动画?

java - 如何使用简单的模拟对其余调用进行单元测试

c# - byte[] 不包含 SequenceEqual 身份验证方法的定义

android - 使用 HTTPUrlConnection 对 Parse 服务器进行 REST API 调用

javascript - 需要使用 javascript 在 <circle> 标记中设置 r(radius) 的值

javascript - 脱离 JavaScript 变量

javascript - Marionette 布局不存在

javascript - 恢复沙箱中的单个 stub

javascript - 使用 php 显示多个图像无法使用 jquery 旋转?

javascript - 组合 jquery 代码块