【发布时间】:2014-04-21 13:27:00
【问题描述】:
我正在编写一个包含几个不同步骤的 .aspx 页面,其中一个步骤是一个长时间运行的操作(将信息与 Web 服务同步)。因此,当页面开始加载该步骤时,它显然会在该操作期间挂起并且没有完全加载页面,然后当它完成同步时它完成加载页面。在这个长时间运行的操作中,我希望有一个进度条随着同步的运行而更新。我认为,棘手的事情是长操作是服务器端的,而不是 JavaScript。
该网站的基本设置如下(我无法真正显示实际代码,我意识到这没有帮助):
Dim ourObject as New OurObject(...)
ourObject.AddSiteHeader()
'Series of If statements to determine the step
ElseIf currentStep = "This Value"
'Long-running operation step
End If
ourObject.AddSiteFooter()
ourObject.Kill()
ourObject = Nothing
使用该设置,问题是在此过程中页面不加载,然后切换到部分加载的网页,然后在同步结束时自发完成。这是预期的,但不是我想要的。
然后我尝试了这个。
Dim ourObject as New OurObject(...)
ourObject.AddSiteHeader()
'Series of If statements to determine the step
ElseIf currentStep = "This Value"
Response.Flush()
'Long-running operation step
End If
ourObject.AddSiteFooter()
ourObject.Kill()
ourObject = Nothing
这有助于从一开始就部分加载页面,但在此过程中它仍然被挂起,再次预期但不希望。
我尝试过的最后一件事是:
Dim ourObject as New OurObject(...)
ourObject.AddSiteHeader()
'Series of If statements to determine the step
ElseIf currentStep = "This Value"
ourObject.AddSiteFooter()
Response.Flush()
'Long-running operation step
End If
If currentStep <> "This Value"
ourObject.AddSiteFooter()
End If
ourObject.Kill()
ourObject = Nothing
哪个让我最接近,因为它实际上加载了整个页面然后执行操作,但是它不能完全工作,因为即使加载了整个页面,它看起来也不正确(它看起来很皱?最好的方法我可以把它),直到过程完成后。但即使它看起来确实正确,因为我已经加载了页脚,我将无法操作 DOM(对吗?我对 Web 开发还是很陌生,所以我想弄清楚)。
我的一些其他想法是让长期运行的进程使用异步调用并用它来做事,但我不知道我会做什么。我还考虑过如何使用 JavaScript 或使用 AJAX 做事,但也不确定如何在流程方面集成这些。
鉴于事情的设置方式,有人对如何做有任何建议吗?
哦,我的最后一个想法是将长时间运行的进程拆分为对网页的多次调用,并且每次只执行它的不同部分。虽然,如果我这样做的话,我必须对事情进行大的重组,但如果这是唯一的方法,那就这样吧。
感谢您的帮助,我很感激。希望我解释得足够好...
【问题讨论】:
标签: javascript asp.net .net dom long-running-processes