下载完成后触发javascript代码

时间:2008-11-24 22:37:04

标签: javascript html

我需要更新一对旧的经典asp页面 - search.asp页面,它提供一个简单的表单,然后发布到results.asp页面。搜索页面上的一个表单选项是“格式”的下拉列表(<select)。如果用户选择excel格式,结果页面只会将Response.ContentType设置为application/vnd.ms-excel,并添加内容处置标头以设置文件名并使其成为附件。就是这样:它可以通过excel来正确渲染html,而且通常做得非常好。

除了一件事之外,所有这些都很有效。 Excel选项的原因在于,在这种情况下,用户确实希望查看多达10,000个项目,甚至更多用于单个搜索。他们将使用Excel对结果进行一些额外的分析。所以搜索操作通常需要一分多钟,我无法改变。

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

第一步是在表单提交时在搜索页面上显示简单的processing...消息,我可以轻松地做到这一点。事实上,它已经为“HTML”格式选项做了这个。问题是,当下载Excel文件时,我不知道如何告诉任何有关下载的内容,因此我可以再次隐藏该消息,并且现有实现根本不提供有关下载进度的任何反馈。有任何想法吗?如果我可以在下载完成时获取一个javascript函数,我可以将任何内容挂钩,但我甚至都不能这样做。

更新
我重新提出问题,试图更清楚地提出问题。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

嗯,是否有可能通过ajax这样做?即,用户选择格式,通过ajax发送查询,并将相应的文档加载到search.asp上的iframe中。然后你可以在你的ajax调用中找到成功的事件并适当地处理这些消息。

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

我建议您尝试修改上传方法以使用类似SWFUpload的内容,以允许对代码进行JavaScript回调。一旦文件上传(假设你正在存储它),我会考虑将文件名和类型传递给Results.asp页面,然后它将从文件存储中检索它。它并不像你在你的问题中所记忆的那样安全;但是,它可以提供更好的用户体验,并可以提供您需要的回调解决方案。

http://swfupload.org/

这是一个jQuery插件示例,它使上传过程和SWFUpload集成变得简单: http://blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/