我正在基于JasperReports
的网络应用程序中创建报告(包含Java
)。每个报告都由Servlet
生成,并流式传输回用户。
我将报告作为附件发回问题。 (Excel报告必须以这种方式发回,因为浏览器无法打开Excel文件)。而且,这些Excel报告需要花费太多时间来生成,因此我在新选项卡中打开它们。同时我在原始标签中发布了一条信息消息。 (例如“请不要关闭新标签”)。
主要问题是我需要知道报告何时失败或成功。更具体地说,我需要知道响应是否已被发回,我需要知道该响应是报告还是错误(现在我发回两个不同的cookie)。如果失败,我需要显示错误消息,否则我需要删除信息消息。
我尝试使用jQuery.post()
来调用servlet,但之后就没有出现下载对话框。因此我使用form
s。无论如何,服务器都会发送回cookie。在客户端我正在等待cookie,当我收到cookie时,我决定该怎么做。这个方法在一篇伟大的帖子here中被认为是美丽的。
但是如果在客户端禁用cookie,我可以采取什么方法?
答案 0 :(得分:0)
好吧,如果有人对这个问题感兴趣,这就是我最终设法解决它的方法。我没有使用表单将请求发送到Servlet
,而是使用window.open()
函数。我在新标签中打开它。然后我设置interval
来检查两件事。
newWindow.closed
),那么我知道报告已成功生成newWindow.document.readyState
为complete
,则表示报告失败(因为如果报告失败,我会发回内联回复)。 这种方法的一个优点(在我的情况下)(除此之外是禁用cookie的工作)是我可以在发生异常时关闭新窗口。
注意:在窗口关闭后的IE8中,newWindow.document
无法访问(权限被拒绝)。要检查这一点,我使用typeof newWindow.document != 'unknown'
。