收到servlet响应时的通知

时间:2011-10-05 11:00:37

标签: java javascript jquery servlets notifications

我正在基于JasperReports的网络应用程序中创建报告(包含Java)。每个报告都由Servlet生成,并流式传输回用户。 我将报告作为附件发回问题。 (Excel报告必须以这种方式发回,因为浏览器无法打开Excel文件)。而且,这些Excel报告需要花费太多时间来生成,因此我在新选项卡中打开它们。同时我在原始标签中发布了一条信息消息。 (例如“请不要关闭新标签”)。

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

我尝试使用jQuery.post()来调用servlet,但之后就没有出现下载对话框。因此我使用form s。无论如何,服务器都会发送回cookie。在客户端我正在等待cookie,当我收到cookie时,我决定该怎么做。这个方法在一篇伟大的帖子here中被认为是美丽的。 但是如果在客户端禁用cookie,我可以采取什么方法?

1 个答案:

答案 0 :(得分:0)

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

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

这种方法的一个优点(在我的情况下)(除此之外是禁用cookie的工作)是我可以在发生异常时关闭新窗口。

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