使用ajax下载生成的excel文件

我正在开发一个使用struts2框架的应用程序。 当用户提供date范围时,我需要准备报告的excel文件,并显示下载popup窗口。 我能够创buildExcel的iostream,但我不知道如何使用ajax打开popup窗口。

我正在生成文件,并返回stream。 所以不能给文件path。 我想要ajax调用来显示一些消息,如"Please wait.." 。 由于文件生成需要更多的时间,它看起来像链接不工作..

没有关于下载文件的Ajax。

您的请求可以是ajax请求,但只需提供生成的文件path,浏览器将执行下载。

无需执行任何AJAX调用。

你只需要返回byte[]作为一个Struts2 Stream结果 ,configuration一个ContentDisposition: attachment; (而不是ContentDisposition: inline ,它将尝试在浏览器中打开它,而不是询问下载或打开桌面应用程序)。

要通知用户正在发生的事情 ,请求已发送且系统未冻结,则需要Loading OVERLAY

Overlay是一个放置在页面上的元素,通常具有部分透明的背景,animation图像显示为“Loading …”,以及模式行为(在页面改变之前它不会closures,并且会阻止同一个请求的双重职位,像双击等等)。

当然,如果你打开一个附件,页面不会改变,那么你需要拦截下载的结束,并自己closures覆盖,或者给用户一个button来closures它。

拦截它,你可以尝试Struts2 Execute and Wait Interceptor

如果要创build自定义叠加层,可以使用ajaxload.info Generator生成加载图像。

如果你不想重新发明轮子,你可以看看现有的覆盖,像jQuery TOOLS

在Ajax的成功方法不返回stream,而是保存在服务器上的文件,并打开一个地址popup一个动作,返回正确的文件。 但popup窗口可能会被阻止在一些浏览器,所以你需要允许你的网站(本地主机或其他url)