飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

JS实现批量生成时显示滚动进度条和百分数

Author:飘易 Source:飘易
Categories:电脑技术 PostTime:2013-12-6 20:50:41
正 文:
    在后台进行批量生成静态HTML时,您可能有这样的需求,需要实时显示整个过程的进度和滚动进度条。您当然可以利用ASP、PHP、Aspx等动态脚本语言实现这样的需求,但是这么做是有缺陷的,在循环生成的过程中,CPU将会一直被占用,而且可能同时产生大量的数据请求。

    比如这样的批量ASP生成脚本:
<%
for id= min to max
response.write "<iframe border=0 vspace=0 hspace=0 marginwidth=0 marginheight=0 framespacing=0 frameborder=0 scrolling=no width=99% height=20 src='crhtml.asp?id="&id&"'></iframe>"
next
%>

    上面的脚本缺点是:同时请求了大量的页面,很容易造成本地客户端或服务器的通信阻塞,可能发生连接请求被拒绝的情况。

    下面飘易设计一种利用js+ajax的方式实现无刷新的批量生成并显示进度条和百分数的方式。飘易以实例说明,本项目共有2个文件:1.html和1.asp(模拟动态生成页面)。

     在批量生成的过程中,我们不能简单用循环的方式比如 for 、while来实现。因为javascript是单线程,如果使用了循环,那么在生成的过程中,就不会逐条地实时显示进度,而是等全部生成html后,才会一次性显示。这样,就背离了我们的设计初衷。

     关键是利用js的 setInterval 定时器函数。
JS实现批量生成时显示滚动进度条和百分数

     1.html源码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>后台 test</title>
<style type="text/css">
body{
font-size:12px;
font-family:"Verdana","宋体","Arial"; 
color:#222;
text-decoration:none;
margin:8px;
}
#process1{
width:500px;
height:20px;
border:1px solid #333;
background-color:#CCCCCC; 
}
#process2{
width:1px;
height:20px;
text-align:center;
background-color:#33FF00; 
}
</style>
</head>

<body>

<div id="process1"><div id="process2"></div></div>
<div id='show'></div>

<script type="text/javascript">
//创建XMLHttpRequest
var xmlhttp;
try{
xmlhttp = new XMLHttpRequest();
}catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
    try{ 
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttp = null;
alert("您的浏览器不支持XMLHTTP,无法完成此操作!");
}
}
}

//利用AJAX的无刷新调用
function subhtml(id){
xmlhttp.open("GET", "1.asp?id="+id+"&rnd="+Math.random(), false);  
xmlhttp.setRequestHeader("Content-Type", "text/html; charset=gb2312"); 
xmlhttp.send(null);
var strText="";
if(xmlhttp.status==200){
strText = xmlhttp.responseText; 
}
return strText;
}

//设置最小id和最大id
var idmin=2;
var idmax=11;
var isrun=false;
var myi=idmin;

//定时器
var intervalId =setInterval(showfun,500);
function showfun(){
if(isrun) return false;
isrun=true;
var res=subhtml(myi);
var para=document.createElement("div");
para.innerHTML = res;
document.getElementById("show").appendChild(para);
document.getElementById('process2').innerText=(100*(myi-idmin+1)/(idmax-idmin+1)).toFixed(2)+"%";
document.getElementById('process2').style.width=500*((myi-idmin+1)/(idmax-idmin+1))+"px";
myi++;
if(myi>idmax) window.clearInterval(intervalId);
isrun=false;
}
</script>

</body></html>

    1.asp源码如下:
<%
Function Sleep(n) '单位秒s
Dim StartTime
StartTime = Timer
Do : Loop Until Timer>n+StartTime
End Function

Sleep(2) '延时2秒
response.write request("id")&"_ok"
%>

    注意:1.asp只是飘易模拟生成html的一个延时页面。
作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Linux搭建PPTP技术的VPN 不同用户对应不同出口公网IP
下一篇:比特币很火,犹如牛市的股票!
0条评论 “JS实现批量生成时显示滚动进度条和百分数”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有