我所拥有的是服务器上的一个进程,该进程运行并需要大量时间。它本质上构建了一些数据表,这些数据表在回发时显示在页面上。
我想要的是一种在服务器进程运行时在某处记录进度的方法,并在使用完成的数据刷新之前在我正在查看的页面上报告该进度。
这甚至可能吗?我能想到的最好方法是将进度记录到服务器上的文件中,并通过 Ajax/Javascript 定期读取文件内容,但这似乎是一个杂项。
也许这可以使用多个页面或线程。我不知道。
有什么建议么?
编辑:
主要目标是在网页上显示某种进度条以显示上述进度。
我所拥有的是服务器上的一个进程,该进程运行并需要大量时间。它本质上构建了一些数据表,这些数据表在回发时显示在页面上。
我想要的是一种在服务器进程运行时在某处记录进度的方法,并在使用完成的数据刷新之前在我正在查看的页面上报告该进度。
这甚至可能吗?我能想到的最好方法是将进度记录到服务器上的文件中,并通过 Ajax/Javascript 定期读取文件内容,但这似乎是一个杂项。
也许这可以使用多个页面或线程。我不知道。
有什么建议么?
编辑:
主要目标是在网页上显示某种进度条以显示上述进度。
这甚至可能吗?
是的,但这并不容易,也不漂亮。
我能想到的最好方法是将进度记录到服务器上的文件中,并通过 Ajax/Javascript 定期读取文件内容,但这似乎是一个杂项。
是的,差不多。其他选项是使用数据库来存储信息或会话,但任何可以通过 Ajax 请求以某种方式访问的存储位置都可以使用。毫无疑问,您会想要创建一个 Web 服务或类似的东西来抽象出您使用的任何存储方法。
这是 Microsoft 示例中该通用方法的实现。它使用 Session 来存储当前进度,并且严重依赖基于 ASP 的构造。
另一种方法完全是在客户端和服务器之间设置一个 websocket,这将允许您将信息从服务器推送到客户端。它可能会表现得更好(减少网络 IO),尽管设置起来可能并不容易。不过,我没有任何示例(或尝试过)这样的解决方案。
ajax 、 ajax 、 xhr、 jsonp,在您的流程中有里程碑,因此您可以提供状态
如果您正在运行的进程独立于您的页面(例如,服务器内的 shell 脚本),您可以将此脚本的中间结果写入 javascript 可访问的文本文件中(例如http://contosoweb.com /web/log.txt ),并使用计时器和一些 jquery 从页面定期更新它。
这里有 jQuery Docs 中的 .Ajax 信息:http: //api.jquery.com/jQuery.ajax/
在这里如何使用计时器:How to set a timer in javascript