繁体   English   中英

下载完成后触发javascript代码

[英]Fire javascript code when download finishes

我需要更新一对旧的经典ASP页面-一个search.asp页面,该页面提供了一个简单的表单,然后将其发布到results.asp页面。 搜索页面上的表单选项之一是“格式”的下拉列表( <select )。 如果用户选择excel格式,则结果页面仅将Response.ContentType设置为application/vnd.ms-excel并添加content-disposition标头以设置文件名并将其作为附件。 就是这样:excel才能正确呈现html,并且通常做得很好。

除了一件事,所有这些工作都很好。 使用Excel选项的原因是,在这种情况下,用户确实确实希望一次搜索看到多达10,000个项目甚至更多。 他们将使用Excel对结果进行一些其他分析。 因此,搜索操作通常只需要一分钟以上的时间,我无法更改。

在这一分钟内,用户体验并不理想。 用户不仅坐在那里几乎没有反馈,甚至没有反馈,而且经常有足够的结果使页面溢出响应缓冲区。 这意味着页面必须定期刷新,因此文件立即开始下载,但是下载管理器本身无法提供有意义的反馈。 我的任务是改善局势。

第一步是在表单提交后在搜索页面上显示一个简单的processing...消息,我可以很容易地做到这一点。 实际上,它已经针对“ HTML”格式选项进行了此操作。 问题是,在下载Excel文件时,我不知道如何告知下载内容,因此我可以再次隐藏该消息,并且现有实现完全不提供有关下载进度的任何反馈。 有任何想法吗? 如果我可以在下载完成后启动javascript函数,则可以对此进行几乎所有的操作,但是我什至还不能这样做。

更新:
我重新措词以试图更清楚地说明问题。

据我所知,浏览器没有提供任何有关下载进度的信息。 从理论上讲,您可以在服务器端执行某些操作,并使用AJAX查询服务器以查看已发送了多少下载内容,但我不知道该怎么做。

嗯,有可能通过ajax做到这一点吗? 即,用户选择格式,通过ajax发送查询,然后将适当的文档加载到search.asp上的iframe中。 然后您可以在ajax调用中获得成功的事件并适当地处理消息。

您可以通过添加标题来将文件下载作为附件下载,以使用户的浏览器保持运行状态。 我意识到这并非您所要的; 但是,如果将其与用于HTML版本的插页式页面结合使用,则可能会改善用户体验。

Response.AddHeader "Content-Disposition", "attachment; filename=report.xls"

用户将看到带有处理图形的插页式页面,然后将其重新发布搜索表单。 这将允许显示“正在处理...”图形,直到页面弹出并带有Excel文件的下载提示。

更新:我尝试使用iframe,让页面定期检查文档对象,并在切换到Excel时捕获“接口不存在”错误,但是在iframe中下载Excel文档时,它仍然锁定了浏览器。我认为没有一个纯粹的js解决方案会起作用。 在那之后,我认为下一个最好的途径是(不幸的是)Flash。 祝好运。

我建议您考虑修改您的上传方法,以使用SWFUpload之类的方法,该方法允许对代码进行JavaScript回调。 文件上载后(假设您正在存储文件),我会考虑将文件名传递给您的Results.asp页,然后在该页中从文件存储中检索文件。 它不像将其保存在问题中那样安全。 但是,它将提供更好的用户体验,并可能提供您需要的回调解决方案。

http://swfupload.org/

这是一个jQuery插件示例,可轻松完成上传过程和SWFUpload集成: http : //blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/

暂无
暂无

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

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