分享
 
 
 

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

王朝html/css/js·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在网页中实现页面无刷新的进度条显示不是一件很麻烦的事情,但如果这个进度条要能准确反映当前事务或者复杂逻辑的执行进度,那么却并不是一件容易的事情,目前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;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有