2009-07-17 99 views
0

有没有什么机会在用经典asp创建循环的同时显示加载栏?加载经典的asp吧

我想过一些ajax样式的加载条,它显示页面是stil创建的东西。

我试图用包含进程状态信息的会话变量来做到这一点,但在此我发现asp服务器有一个队列,这意味着您可以同时运行一个asp页面。

在加载asp页面时,我无法在同一会话的sam服务器上打开另一个asp页面。新会议是可能的,但我想与同一会话(如果这是可能的话)。

想法: 可以通过ajax请求来完成,该请求会请求asp页面并在页面加载时显示加载栏?

是否有任何解决方法来处理状态栏?

(抱歉不好英语) 谢谢

编辑:

我这样,但我不能在ASP页的访问会话变量。 会话阅读器页面在第一个asp请求完成后只给我一个答案。我认为这是一个会话队列思考。

它看起来像这样对我说:

AJAX页面 - (请求处理ASP页) - > process.asp中

(相同AJAX页面) - (请求会话读者页) - > sessionreader .asp的

而sessionstatus!= 100显示下载进度条

的问题是,我得到了一个sessionreader.asp答案时process.asp中完成。这就是为什么我认为这是一个ASP会话队列思考。

也许它会工作,如果给第二个请求一个新的会话ID(如果这是可能的话)?

回答

1

曾经有一种伎俩要么禁用Response.Buffer(将其设置为false)或让它被缓冲,但有时您会因为想要更新进度而执行Response.Flush。

因此,假设你的页面的顶部(图片或表格或div或任何你想要的)的某个地方有你的进度条,并且你在asp脚本中做了一些事情(比如循环),不时,将JavaScript刷新回客户端以更新应该已经在屏幕上的进度条。像这样:

<% 
    REM Might be a good idea to set the timeout to some large number here... 
    Response.Timeout = ... 
%> 
<html> 
: 
<body> 
    <p>Please wait...<span id="progress">0</span>% completed.</p> 
    : content here... 
    <% 
    REM Make sure the things above this get sent to the client first 
    REM so they will be rendered before the rest of the page is rendered. 
    Response.Flush() 

    For iCnt = 0 To 100 
    REM Do some stuffs here... 

    %> 
    <script>$("#progress").html(i)</script> 
    <% 
    Response.Flush() 
    Next 
    %> 
    : some more contents here... 
</body> 
</html> 

我不确定这是否仍然适用于现代浏览器,有一段时间没有使用它。

3

您可以在客户端触发GIF动画,在您发送请求的那一刻。

+0

这不会显示实时进度条。 – 2009-07-17 08:02:01

+1

没错。但大多数进度条并不是实时的。它们大多是“正在进行的行动,耐心”的迹象。虽然有一些例外,如基于Flash IMHO的GMail中的文件上传。 – EFraim 2009-07-17 09:34:57

+0

+1一个合理的实用解决方案。 – AnthonyWJones 2009-07-17 15:35:35

0

只有一个asp页面就无法做到这一点。你需要一个显示给用户的页面(你在哪里进度吧)。然后,您将需要在循环中对读取会话对象的页面进行ajax调用(使用jQuery?)。而且您需要一个实际正在处理的页面,并将其状态写入由ajax调用定期监视的会话。您将需要定期与ajax进行通话,以便随时检查会话,直到您达到最终结果。如果这是一个非常漫长的过程,你可以在会话中存储一个数字1-100,但是10,20,...,100可能效果最好。当你达到100时,你会打破循环,不再轮询会话阅读页面。

原因是你需要一个页面来显示给你的酒吧的用户。

正在进行处理的页面在完成处理之前无法向用户显示任何内容。

简单地读取会话的页面可以快速处理并快速显示其结果。

有意义吗?

0

您现在正处在正确的轨道上,问题在于您正在Windows XP上开发并遇到IIS 5一次只能处理一个请求的限制。
由于您怀疑在尝试监视的原始请求完成之前,AJAX进度请求未返回。

我知道这个版本的IIS没有办法解决这个问题。这可能是另一个限制,以防止您在生产环境中使用XP IIS 5。即使第二个请求来自具有不同IP地址的另一台机器,它也不会被处理,直到第一个完成。