利用AJAX技术实现网页无刷新进度条显示

时间:2007-11-17 22:54:40  来源:  作者:

  在网页中实现页面无刷新的进度条显示不是一件很麻烦的事情,但如果这个进度条要能准确反映当前事务或者复杂逻辑的执行进度,那么却并不是一件容易的事情,目前AJAX技术流行,所以本文作者试想通过AJAX来实现网页准确进度条,以銄读者。zfE第一天空网络

  首先应该想一个问题,复杂事务或者事务逻辑如果不按线程方式运行,运行在JAVA运行中根本无法跳过复杂事务去处理进度显示,所以我们这边很自然的想到复杂事务或者业务逻辑用多线程实现。zfE第一天空网络

  再想另一个问题,事务处理应该需要网页上的一系列参数信息的,那么如何获取这些参数呢,这个似乎容易想到,传一个HttpServletRequest过去就可以了。zfE第一天空网络

  为了进度条公用,所有的复杂事务处理都应该实现同一个接口或者抽象类,我这里用了一个接口,如下:zfE第一天空网络

   zfE第一天空网络

public interface IprogressBar {

  public void execute(HttpServletRequest req,String pbid);//执行复杂事务zfE第一天空网络

  }zfE第一天空网络

  用一个实现多线程的抽象类,如下:

   zfE第一天空网络

public interface IprogressBar {

  public void execute(HttpServletRequest req,String pbid);//执行复杂事务zfE第一天空网络

  }zfE第一天空网络

  设计到具体项目不便给出代码,这里我另外写了一个测试类,也就是执行复杂事务处理的类,如下:

   zfE第一天空网络

public class TestPB extends AbstractProgressBar{

  public void execute(HttpServletRequest req, String pbid) {zfE第一天空网络

  String sql="insert into temp_table(idx)values(?)";zfE第一天空网络

  int pid=Integer.parseInt(pbid);zfE第一天空网络

  ProgressBar pb=new ProgressBar(pid,300,0,1);zfE第一天空网络

  //模拟大事务

  zfE第一天空网络

 for(int i=0;i<300;i ){

  DbUtils.executeUpdate(sql,new Object[]{new Integer(i)});zfE第一天空网络

  //控制进度

  zfE第一天空网络

pb.stepIt();

  }zfE第一天空网络

  }zfE第一天空网络

  }zfE第一天空网络

接着利用AJAX技术来实现网页的无刷新进度条实现,代码如下:zfE第一天空网络

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

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

zfE第一天空网络

文章评论

共有 位天空网友发表了评论 查看完整内容

特别推荐
  • 文字广告
  • 文字广告
  • 文字广告
  • 文字广告
站长黑板报

24小时热门信息