2008-11-24 117 views
0

我需要更新一对旧的经典asp页面— a search.asp页面,该页面提供了一个简单的表单,然后将其发布到results.asp页面。搜索页面上的表单选项之一是“格式”的下拉列表(<select)。如果用户选择excel格式,结果页面将Response.ContentType设置为application/vnd.ms-excel,并添加一个content-disposition标头来设置文件名并将其作为附件。就是这样:它能够正确渲染html,并且通常做得非常好。下载完成时触发javascript代码

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

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

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

更新:
我重新提出了这个问题,试图更清楚地提出问题。

回答

0

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

0

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

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

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

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

+0

将不起作用:看到我更新的问题。 – 2008-11-25 00:55:44

2

据我所知,浏览器并没有提供任何有关下载进度如何的钩子。理论上,你可以在服务器端做一些事情,并使用AJAX来查询服务器,看看有多少下载已经发送,但我不知道该怎么做。

+0

不,当然没有简单的钩子:)如果这很容易,我已经解决了这个问题。我希望有人能够解决这个问题。 – 2008-11-25 14:38:48

+0

另外:为了使ajax工作,results.asp页面必须支持它,而且它目前甚至没有接近。 – 2008-11-25 15:05:23

0

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

http://swfupload.org/

这里是一个jQuery插件的例子,使得上传过程和集成的SWFUpload容易: http://blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/