加载酒吧与经典的asp

时间:2009-07-17 07:39:26

标签: asp-classic

是否有机会在使用经典asp创建循环时显示加载栏?

我想到了一些ajax风格的加载栏,它显示页面正在创建一些东西。

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

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

思想: 是否可以使用ajax请求来请求asp页面并在页面加载时显示加载栏?

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

(抱歉英文不好) 谢谢

编辑:

我是这样但我无法通过asp页面访问会话变量。 第一个asp请求完成后,会话阅读器页面只给出了答案。我认为这是一个会话队列 - 想想。

对我来说这看起来像这样:

ajax页面 - (请求进程asp页面) - > process.asp中

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

while sessionstatus!= 100 show process bar

问题是我在process.asp完成后得到了sessionreader.asp的答案。这就是为什么我认为这是一个asp-session-queue-think。

如果给第二个请求一个新的会话ID(如果可能的话),它可能会有效吗?

4 个答案:

答案 0 :(得分:3)

您可以在发送请求时在客户端触发GIF动画。

答案 1 :(得分: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>

我不确定这是否仍适用于现代浏览器,暂时不使用它。

答案 2 :(得分:0)

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

这样做的原因是您需要一个页面显示给您的酒吧用户。

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

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

有意义吗?

答案 3 :(得分:0)

问题在于您正在使用Windows XP进行开发并遇到IIS 5一次只能处理一个请求的限制。 因为您怀疑在您尝试监视的原始请求完成之前,AJAX请求的进度没有返回。

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