利用AJAX技術實現網頁無重新整理進度條顯示

來源:互聯網
上載者:User
在網頁中實現頁面無重新整理的進度條顯示不是一件很麻煩的事情,但如果這個進度條要能準確反映當前事務或者複雜邏輯的執行進度,那麼卻並不是一件容易的事情,目前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"%>
<html>
<head>
<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;
}
}
}
}
</script>
</head>
<body>
          <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;
    </script>
</body>
</html>
 
 
整個頁面將不會有任何重新整理。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.