【发布时间】:2012-08-27 12:30:36
【问题描述】:
我的解决方案中遇到了 js 异步回调的问题。这是请求;
- 用户点击“生成 Excel”按钮。
- 正在生成包含大量数据的服务器 excel 文件(大约需要 2 分钟)。
- 在此期间,用户可以在应用程序中进行其他操作,包括页面回发/请求/等。
- 生成 excel 时,用户会弹出一个弹出窗口以从服务器下载文件,而不管用户所在的页面是什么。
我做了什么:
- 创建了一个函数来生成 excel 文件 w.r.t 业务需要“GenerateReport”。 (服务器端)
- 编写了一个 WebMethod 'GetFilePath',它递归地检查文件是否已在某个服务器位置由 GenerateReport 方法生成,并返回新文件的文件路径,这方法永远不会根据业务逻辑再次返回相同的文件路径。 (服务器端)
-
创建了一个 javascript 函数 DownloadLink() 递归调用 GetFilePath 方法,延迟为 60 秒。函数调用如下所示:
PageMethods.GetFilePath(UserId, onSuccess, onError);
OnSuccess 和 OnError 是 JS 回调函数,当下载文件的 URL 可用时触发 OnSuccess,此 JS 方法显示弹出下载,出现错误时调用 OnError。
工作正常,直到发生以下情况。 当从 GetFilePath 方法调用 OnSuccesss 并且同时发生一些其他操作的回发时,由于尚未加载新页面并且不会向用户显示下载弹出窗口,因此永远不会进行 OnSuccess 调用。
我应该怎么做才能解决这个问题,以确保用户获得下载链接。
【问题讨论】:
-
1.获取用户电子邮件地址并使用文件路径发送邮件是最佳解决方案。 2.检查每个页面加载是否创建下载文件,如果文件可用,则生成链接
-
@AnantDabhi ,要求是在服务器上生成文件时,无论用户在应用程序中的页面如何,都应显示文件保存弹出窗口。不能依赖页面加载,因为它需要某种回发。电子邮件很容易,但不是我的电话:(。
标签: .net asynchronous postback webmethod pagemethods