我们有报告页面,用户可以从中导出CSV格式的报告。在C# MVC
中的服务器上,我们创建MemoryStream
并在数据转换后写入每一行,最后将响应发送为File
。完成请求后,浏览器会自动下载此文件。由于报告需要很长时间才能生成,因此用户必须在阻塞状态下等待它
为了解决这个问题,我发送了Async Ajax request
并通过创建CSV file
将响应保存为Blob URL
。
此工作正常如果用户停留在报告页面上,直到下载了所有报告,但如果用户从报告页面导航到其他页面Ajax request response
则会丢失。
所以我有一些以下问题
Ajax request
会发生什么
答案 0 :(得分:7)
当用户离开时,服务器将继续编译报告。
没有
无处可去。浏览器有一个“新”页面,没有待处理的请求;它不知道任何先前的活动(HTML是无状态的)。
没有。也许您可以使用onBeforeUnload事件处理程序来警告用户并允许他们留在页面上。但有些浏览器会忽略该事件的任何事件处理程序,因此很难使其可靠。
你最好的选择可能是界面变化。在浏览页面上发布通知将取消他们正在等待的任何报告。并为用户提供一种简单的方法来了解他们的报告正在准备中,例如html加载gif。