如何在一个需要执行长时间的ASP文件中显示进度条,或者执行中数据

billy36 2004-01-21 07:26:44
在一个需要执行很长时间的教本中我所作的都是会执行很长时间才最终显示出结果
比如:
while 1=1
Response.Write(“Hello! Magicw3 Com.”)
if NOT Response.IsClientConnected THEN Response.End
WEND

这个就永远也显示不出来了。而我看有朋友写的却是这一页一直在write。不明白怎么回事?

记得有的论坛的安装程序在安装的时候会在执行的时候就显示出来检测的过程(1条1条的出来最后看是一个文件)。是怎么实现的?

也就是如果可以把执行的过程显示出来那么不就可以做成进度条了吗。有没有这样的实例啊?

...全文
418 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjianping 2004-07-16
  • 打赏
  • 举报
回复
我的建议是开发组件让费时的操作在后台进行,前台asp只负责读取状态,并显示进度条
sfply 2004-07-16
  • 打赏
  • 举报
回复
其实使用进度条是为了让操作者更加细致地掌握当前进程,绝对不是鸡肋

看我的实现方法http://www.shbbs.net/share_contest
点菜单--管理--数据更新--更新全部股票数据
就可以看到效果
jsbiz 2004-07-16
  • 打赏
  • 举报
回复
间研究了一个进度条,大致的思想是
在后台处理数据时,前台页面同时计数显示Proess Bar
使用了layer来显示
用法:
1。引用
<script language="javascript" src="ShowProcessBar.js"></script>
2。在提交Button或<A>或<span> 加扩展属性
IsShowProcessBar="True"


文件ShowProcessBar.js如下

AddProcessbar();
var bwidth=0;
var swidth = document.all.waiting.clientWidth;

function CheckIsProcessBar(obj)
{
if (obj.IsShowProcessBar=="True")
{
return false;
}
else
{
return true;
}
}

function CheckClick(e)
{
if (e == 1)
{
if (bwidth<swidth*0.98){
bwidth += (swidth - bwidth) * 0.025;
if (document.all)document.sbar.width = bwidth;
else document.rating.clip.width = bwidth;
setTimeout('CheckClick(1);',150);

}
}
else
{
if(document.all)
{
if(document.all.waiting.style.visibility == 'visible')
{document.all.waiting.style.visibility = 'hidden';
bwidth = 1;}
whichIt = event.srcElement;

while (CheckIsProcessBar(whichIt))
{
whichIt = whichIt.parentElement;
if (whichIt == null)return true;
}


document.all.waiting.style.pixelTop = (document.body.offsetHeight - document.all.waiting.clientHeight) / 2 + document.body.scrollTop;
document.all.waiting.style.pixelLeft = (document.body.offsetWidth - document.all.waiting.clientWidth) / 2 + document.body.scrollLeft;
document.all.waiting.style.visibility = 'visible';
if(!bwidth)CheckClick(1);
bwidth = 1;

}

else
{

if(document.waiting.visibility == 'show')
{document.waiting.visibility = 'hide';
document.rating.visibility = 'hide';
bwidth = 1;}
if(e.target.href.toString() != '')
{
document.waiting.top = (window.innerHeight - document.waiting.clip.height) / 2 + self.pageYOffset;
document.waiting.left = (window.innerWidth - document.waiting.clip.width) / 2 + self.pageXOffset;
document.waiting.visibility = 'show';
document.rating.top = (window.innerHeight - document.waiting.clip.height) / 2 + self.pageYOffset+document.waiting.clip.height-10;
document.rating.left = (window.innerWidth - document.waiting.clip.width) / 2 + self.pageXOffset;
document.rating.visibility = 'show';
if(!bwidth)CheckClick(1);
bwidth = 1;
}
}
return true;
}
}

function AddProcessbar()
{

var Str=""
Str+= "<div id=waiting style=position:absolute;top:50px;left:100px;z-index:1;visibility:hidden >";
Str+= "<layer name=waiting visibility=visible zIndex=2 >"
Str+= "<table border=2 cellspacing=1 cellpadding=0 bordercolorlight=#FFFFFF bordercolordark=#C0C0C0 bgcolor=#E0E0E0>"
Str+= " <tr>"
Str+= " <td bgcolor=#E0E0E0 height=30px width=300px align=center>"
Str+= " <font color=black>系統正在處理中...</font>"
Str+= " </td>"
Str+= " </tr>"
Str+= " <tr>"
Str+= " <td bgcolor=#E0E0E0>"
Str+= " <img width=1 height=10 name=sbar style=background-color:#6699cc>"
Str+= " </td>"
Str+= " </tr>"
Str+= "</table> "
Str+= "</layer>"
Str+= "</div>"
document.write(Str)

if(document.all)document.onclick = CheckClick;
}


测试文件TestShowBar.HTML

<HTML>
<HEAD>
<script language="javascript" src="ShowProcessBar.js"></script>
</HEAD>
<BODY>
<A href="error.asp" IsShowProcessBar="True">A Href</a>
<BR>
<BR>
<span onclick="location.href='error.asp'" style="cursor:hand" IsShowProcessBar="True"><font color=blue>Span</font></span>
<BR>
<form action="error.asp">
<input type=Submit value="Submit">
<input type=button value="normal button" IsShowProcessBar="True">
</form>
<P IsShowProcessBar="True">AAAAAAAAAAAAA</P>
</BODY>
</HTML>


这个是我找到的
不过好象有错误
我也想知道
DARKNESSFALL 2004-07-16
  • 打赏
  • 举报
回复
关注
huangjianping 2004-07-16
  • 打赏
  • 举报
回复
能不能搞一个像aspupload一样的,一个进程可能要10分钟,全部交到后台处理,asp只负责读取状态。有人用java做出来啦。
billy36 2004-01-31
  • 打赏
  • 举报
回复
有些大数据量的处理显然再怎么重写也不会变快的,那为什么不能加一个进度条给用户一个明显的提示呢.
nchen123 2004-01-31
  • 打赏
  • 举报
回复
在页面首部加入这一句:

response.buffer = false
lsaturn 2004-01-31
  • 打赏
  • 举报
回复
要有真实的进度用flash或者xml
minghui000 2004-01-31
  • 打赏
  • 举报
回复
支持。。楼上
  • 打赏
  • 举报
回复
你的asp需要进度条,
说明你的asp应该重写,
本来就慢了,你还雪上加霜,追求华而不实的东西。

--搞笑
billy36 2004-01-31
  • 打赏
  • 举报
回复
再讨论
xujie839997 2004-01-21
  • 打赏
  • 举报
回复
关注中
紫玄青 2004-01-21
  • 打赏
  • 举报
回复
有意思。:)是一个思路和方法,那么如果一个页面包括ASP+HTML时,照这个方法,基本上也可以用依葫芦画瓢,
billy36 2004-01-21
  • 打赏
  • 举报
回复
通过测试算是可以实现了。
但是不知道原理好像应该就是
response.buffer=true
Response.Flush
的作用
首先打开缓存然后Response.Flush 将缓存的内容先显示出来,一步步向下走。
不知谁有完整的进度条实例。

response.buffer=true
while 1=1
Response.Write("Hello! Magicw3 Com.")
Response.Flush
if NOT Response.IsClientConnected THEN Response.End

WEND
billy36 2004-01-21
  • 打赏
  • 举报
回复
一个例子只是不知怎么显示。


在ASP处理程序时显示进度

用过软件的朋友都知道,进度条是一个优秀软件的重要组成部分。
它的存在能够使用户及时掌握程序的运行进度,确认应用程序正常工作。可是ASP中似乎没有上述标准控件,控制起来也比较麻烦。
那幺如何实现进度条呢?
以下是本人的一些观点(仅供参考)
我们通常在用ASP处理程序(指的是写文件或操作数据库)的时候,会专门用一个页面(*.asp)去处理或控制这些程序,当处理完毕的时候再跳转到显示页面。这时我们就可以通过这些处理页面显示进度条。其方法是根据程序处理的进度依次画一百张同样的图形(如有颜色的矩形),从而形成进度条。其效果与用其它编程工具所实现的基本相似
以下是一些Source,希望能够给各位有个启发。
response.buffer=true
dim lostnum
dim shownum
delayshow(dstep,dmax)过程是用于显示多少img(画多少进度)
其中dmax为表示整个程序需要处理多少(dmax)步才能完成整个处理程序.
其中dstep表示当前处理的步骤占整个处理过程中的分量,用数量表示。
变量lostnum的存在是由于dmax过大(比如10000),而dstep过小(比如1)造成的。如果调用delayshow(1,10000)势必不可能画一次img,事实上
delayshow(100,10000)才画一次,表示完成1%,因为100占10000的1%.
sub delayshow(dstep,dmax)
dim total //显示画面100张img
dim dtemp //过渡变量
total=100
dtemp=dstep
dstep=dstep+lostnum
if (dstep*total)/dmax<1 then
//判断当要处理的东西连1%都没有时,不画img同时用变量lostnum存放未画的处理总数,便于下次调用本过程时在处理。
lostnum=lostnum+dtemp
else
for ccc=1 to fix((dstep*total)/dmax) //取整数
Response.Write "<img src=""../images/delay1.jpg"">"
next
Response.Flush //将缓存里的东西(图片)显示出来
//变量shownum用于存放目前已经画的img
shownum=shownum+fix((dstep*total)/dmax)
lostnum=0
end if
end sub
//由于算法的问题,主要是取余造成不能完全画100次,这时就需要
过程showlost()将余下未画的img,通通显示处理,实现进度条的等长
sub showlost()
for ccc=1 to (100-shownum)
Response.Write ("<img src=""../images/delay1.jpg"">")
next
Response.Write "<BR>"
Response.Flush
end sub

最后请注意
这里需要用到缓存技术
response.buffer=true;
response.flush;
response.end
这些请参考MSDN帮助
billy36 2004-01-21
  • 打赏
  • 举报
回复
基本上按照这个葫芦可以画出瓢了
就是在数据处理的中间(循环中)写上上面的缓存和释放缓存的应该就能产生一个比较准确的进度条了,

28,407

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧