【问题标题】:Notification when servlet response received收到 servlet 响应时的通知
【发布时间】:2011-10-05 11:00:36
【问题描述】:

我正在基于Java 的Web 应用程序中创建报告(使用JasperReports)。每个报告都由Servlet 生成并流式传输给用户。 我对作为附件发回的报告有疑问。 (Excel 报告必须以这种方式发回,因为浏览器无法打开 Excel 文件)。此外,这些 Excel 报告的生成时间太长,因此我在新选项卡中打开它们。同时,我在原始标签中发布了一条信息消息。 (类似于“请不要关闭新标签”)。

主要问题是我需要知道报告何时失败或成功。更具体地说,我需要知道响应是否已被发回,并且我需要知道该响应是报告还是错误(现在我正在发回两个不同的 cookie)。如果失败,我需要显示错误消息,否则我需要删除信息消息。

我曾尝试使用jQuery.post() 调用servlet,但随后没有出现下载对话框。因此我使用forms。无论如何,服务器都会发回一个 cookie。在客户端,我正在等待 cookie,当我收到一个时,我决定做什么。这种方法非常有效,正如一篇很棒的帖子here 中所描述的那样。 但是,如果在客户端禁用了 cookie,我可以采取什么方法呢?

【问题讨论】:

  • 我不明白这部分:“我尝试使用 jQuery.post() 调用 servlet,但没有下载框。”你说的是什么下载框?
  • 我说的是在响应为附件时出现的下载对话框。 (我会改变这部分问题)
  • @claymore1977:使用纯 JavaScript/Ajaxnot 可以将文件下载为附件(显示 Save As 对话框),因为 JS 没有'没有任何功能来显示 另存为 对话框。它必须使用完全值得的同步请求来进行。

标签: java javascript jquery servlets notifications


【解决方案1】:

好吧,如果有人对这个问题感兴趣,这就是我最终设法解决的方法。我没有使用表单将我的请求发送到Servlet,而是使用window.open() 函数。我在新标签页中打开它。然后我设置了一个interval 来检查两件事。

  • 如果新窗口关闭 (newWindow.closed) 则我知道报告生成成功
  • 如果newWindow.document.readyStatecomplete,则表示报告失败(因为如果报告失败,我会发回内联响应)。

这种方法的一个优点(就我而言)(除了在禁用 cookie 的情况下)是我可以在发生异常时关闭新窗口。

注意:在 IE8 中关闭窗口后,newWindow.document 变得无法访问(权限被拒绝)。要检查这一点,我使用typeof newWindow.document != 'unknown'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2015-10-12
    相关资源
    最近更新 更多