东莞电脑批发网 - 东莞地区最大的电脑批发网

利用AJAX技术实现网页无刷新进度条显示
发布人:gxy   点击数:508   2008-5-7 9:32:16
    在网页中实现页面无刷新的进度条显示不是一件很麻烦的事情,但如果这个进度条要能准确反映当前事务或者复杂逻辑的执行进度,那么却并不是一件容易的事情,目前Ajax技术流行,所以本文作者试想通过AJAX来实现网页准确进度条,以銄读者。
 首先应该想一个问题,复杂事务或者事务逻辑如果不按线程方式运行,运行在JAVA运行中根本无法跳过复杂事务去处理进度显示,所以我们这边很自然的想到复杂事务或者业务逻辑用多线程实现。
 再想另一个问题,事务处理应该需要网页上的一系列参数信息的,那么如何获取这些参数呢,这个似乎容易想到,传一个HttpServletRequest过去就可以了。
 为了进度条公用,所有的复杂事务处理都应该实现同一个接口或者抽象类,我这里用了一个接口,如下:
public interface IprogressBar {
  public void execute(HttpServletRequest req,String pbid);//执行复杂事务
}
用一个实现多线程的抽象类,如下:
public abstract class AbstractProgressBar extends TimerTask implements IprogressBar {
 private HttpServletRequest request;
 private String pbid;
  public AbstractProgressBar(){
 }
 //子类必须重载这个函数
 public abstract void execute(HttpServletRequest req, String pbid);
 public void run() {
  execute(request,pbid);
 }
 public void setRequest(HttpServletRequest req){
  this.request=req;
 }
 public void setPbid(String pbid){
  this.pbid=pbid;
 }
}
设计到具体项目不便给出代码,这里我另外写了一个测试类,也就是执行复杂事务处理的类,如下:
public class TestPB extends AbstractProgressBar{
 public void execute(HttpServletRequest req, String pbid) { 
  String sql="insert into temp_table(idx)values(?)";
  int pid=Integer.parseInt(pbid);
  ProgressBar pb=new ProgressBar(pid,300,0,1);
  //模拟大事务
  for(int i=0;i<300;i++){
   DbUtils.executeUpdate(sql,new Object[]{new Integer(i)});
  //控制进度
pb.stepIt();
  }
 }
}
接着利用AJAX技术来实现网页的无刷新进度条实现,代码如下:
<%@ page contentType="text/html;charset=UTF-8"%>



<title>无刷新页面进度条测试</title>
<STYLE TYPE="text/CSS">
<!--
BODY {OVERFLOW:scroll;OVERFLOW-X:hidden}
.DEK {POSITION:absolute;VISIBILITY:hidden;Z-INDEX:200;}
//-->
</STYLE>
<script type="text/javascript">
var xmlHttp;
var pbid;//进度条ID
function createXMLHttpRequest(){
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function checkDiv() {
var progress_bar = document.getElementById("progressBar");
if (progress_bar.style.visibility != "visible") {
progress_bar.style.visibility = "visible";
}else
{
progress_bar.style.visibility = "hidden";
}
}
function go() {
createXMLHttpRequest();
checkDiv();
var url = "../servlet/ProgressBarServlet?task=create&impcls=blogcn.pb.imp.TestPB";//其中
blogcn.pb.imp.TestPB是复杂事务的实现类
var button = document.getElementById("go");
button.disabled = true;
xmlHttp.open("GET", url, true);
xmlHttp.setRequestHeader("Content-Type", "text/xml;charset=gb2312");
xmlHttp.onreadystatechange = goCallback;
xmlHttp.send(null);
}
function goCallback(){
if (xmlHttp.readyState==4)
{
 if (xmlHttp.status==200) {
 pbid=xmlHttp.responseXML.getElementsByTagName("pbid")[0].firstChild.data;
  setTimeout("pollServer()", 2000);
 }
}
}
function pollServer() {
createXMLHttpRequest();
var url = "../servlet/ProgressBarServlet?task=poll&pbid="+pbid;
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = pollCallback;
xmlHttp.send(null);
}
function pollCallback(){
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
 var percent_complete =
 xmlHttp.responseXML
 .getElementsByTagName("percent")[0].firstChild.data;
 if (percent_complete < 100) {
     PB1.pos=percent_complete;
        PB1.Update();   
  setTimeout("pollServer()", 2000);
 } else {
     PB1.pos=100;
        PB1.Update();
  document.getElementById("go").disabled = false;
 }
 }
 }
}


          <input type="button" value="执行大事务" id="go" onclick="go();"/>
    <DIV id="progressBar">
       <script language="javascript">
     var PB1=new TProgressBar("myPB1",220,180,375,20);
     PB1.Create();
     PirateCount=100;
     PID=PirateCount-2;
     PB1.Reposition();
     PB1.max=PID;





我来说两句
匿名发表
小提示:您发表的言论后果负责,请各位遵守法纪注意语言文明

赞助商广告
金吉防辐射服装专卖
金吉防辐射服装专卖,厂家直接发货,权威认证,衣服电话防伪,质量保证。 www.taojincn.com

世新虚拟主机、域名低价销售。
庆新年迎新春,世新虚拟主机、域名低价销售。 www.dgdns.net

虎门(长安/厚街/沙田)网络公司
专业SEO:网站建设,网站推广,网站优化. 做百度,雅虎,google关键词优化推广免费送网站!

世新电脑配件批发及组装零售
主要批发电脑配件 :硬盘 CPU 内存 显示器 主板 显卡 光驱 网络产品 机箱电源 服务器机箱 东莞地区送货上门,货运货到付款或网上打款

易信达进销存管理软件
易信达进销存系列管理软件

AOC(冠捷)16.6寸新上市
AOC(冠捷)16.6寸新上市.1500:1 小巧方便携带 靓价:710元 AOC 919SW 8000:1 19寸宽屏液晶显示器 靓价:850 AOC 915SW 5000:1 19寸宽屏液晶显示器 靓价: 865

成为虎门OK网会员做本地
虎门OK网是虎门最大的信息网站,每日集中在写字楼、工厂、商家等一大批高消费群关注及使用信息查询等服务。经统计至2008年4月每天在线看信息超过11000人,虎门OK网----被评为虎门最在价值的商业网站。

中科世新电脑超值特价
索可17寸纯平 特价 300 一年保修,三个月包换 华硕18XDVD 光驱 特价 117 一年保修,三个月包换 七彩虹3850/512M显卡 特价 475 一年保修,七天包换 易拓160G/串口蓝德代理特价 245 三年保修详情请进入查看!!!

新闻资讯 | 电脑技术 | 批发报价 | 人才市场 | 特价区 | 关于我们 | 广告业务 | 免责声明
东莞电脑批发网  版权所有  2004-2008  All Rights Reserved.
电话:0769-85189915  传真:0769-85189925  咨询信箱:gxy#dgdns.net
第一QQ群:33853133(已满)  第二QQ群:1796060  第三QQ群:1796099  第四QQ群:63034897
地址:东莞市虎门镇太平广场花园2162室 邮编:523900  粤ICP备06013379号