繁体   English   中英

收到servlet响应时的通知

[英]Notification when servlet response received

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

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

我试图使用jQuery.post()来调用servlet,但随后却没有出现下载对话框。 因此,我使用form s。 无论如何,服务器都会发送回cookie。 在客户端,我正在等待cookie,当我收到cookie时,我会决定要做什么。 这种方法的工作原理很漂亮,请参阅此处的精彩文章。 但是,如果在客户端禁用了cookie,我可以采取什么方法呢?

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

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

这种方法的优点(对于我而言)(除了在禁用cookie的情况下有效)还在于,当发生异常时,我可以关闭新窗口。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM