Ajax實現的進度條,如下代碼:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>Ajax Progress Bar - www.cxybl.com</title>
- <script type="text/javascript">
- var xmlHttp;
- var key;
- var bar_color = 'gray';//進度條的顏色
- var span_id = "block";
- var clear = " ";
- function createXMLHttpRequest()//建立XMLHttpRequest對象
- {
- if(window.ActiveXObject)
- {
- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
- }
- else if(window.XMLHttpRequest)
- {
- xmlHttp = new XMLHttpRequest();
- }
- }
- function go()
- {
- createXMLHttpRequest();//建立XMLHttpRequest對象
- checkDiv();//顯示捲軸
- xmlHttp.onreadystatechange = callBack;//設定回呼函數
- var url = "/AjaxDemo/servlet/ProgressBarServlet?task=create";//請求的地址
- var button = document.getElementById("go");
- button.disabled = true;//設定按鈕不可用
- xmlHttp.open("get",url,true);//開啟對伺服器的串連
- xmlHttp.send();//發送請求
- }
- function callBack()
- {
- if(xmlHttp.readyState == 4)
- {
- if(xmlHttp.status == 200)
- {
- setTimeout("pollServer()",500);//定時調用
- }
- }
- }
- function pollServer()
- {
- createXMLHttpRequest();
- var url="/AjaxDemo/servlet/ProgressBarServlet?task=poll&key="+key;
- xmlHttp.onreadystatechange = pollCallBack;
- xmlHttp.open("GET",url,true);
- xmlHttp.send();
- }
- function pollCallBack()
- {
- if(xmlHttp.readyState == 4)
- {
- if(xmlHttp.status == 200)
- {
- var percent_complete = xmlHttp.responseXML.getElementsByTagName("percent")[0]
- .firstChild.data;//從伺服器端獲得響應資訊
- var index = processResult(percent_complete);
- for(var i = 1; i<=index; i++)
- {
- var elem = document.getElementById("block"+i);
- elem.innerHTML = clear;
- elem.style.backgroundColor = bar_color;
- var next_cell = i+1;
- if(next_cell > index && next_cell <= 9)
- {
- document.getElementById("block"+next_cell).innerHTML = percent_complete + "%";
- }
- }
- if(index <9 )
- {
- setTimeout("pollServer()",500);
- }
- else
- {
- document.getElementById("complete").innerHTML = "Complete!";
- document.getElementById("go").disabled = false;
- }
- }
- }
- }
- function processResult(percent_complete)
- {
- var ind;
- if(percent_complete.length == 1)
- {
- ind = 1;
- }
- else if(percent_complete.length == 2)
- {
- ind = percent_complete.substring(0,1);
- }
- else
- {
- ind = 9;
- }
- return ind;
- }
- function checkDiv()
- {
- var progress_bar = document.getElementById("progressBar");
- if(progress_bar.style.visibility == "visible")
- {
- clearBar();
- document.getElementById("complete").innerHTML = "";
- }
- else
- {
- progress_bar.style.visibility = "visible";
- }
- }
- function clearBar()
- {
- for(var i =1; i<10; i++)
- {
- var elem = document.getElementById("block"+i);
- elem.innerHTML = clear;
- elem.style.backgroundColor = "white";
- }
- }
- </script>
- </head>
- <body>
- <h1>Ajax Progress Bar Example</h1>
- Launch long-running process:
- <input type="button" value="Launch" id="go" onclick="go()"/>
- <p>
- <table align="center">
- <tbody>
- <tr>
- <td>
- <div id="progressBar" style="padding:2px;border:solid black 2px;visibility:hidden">
- <span id="block1"> </span>
- <span id="block2"> </span>
- <span id="block3"> </span>
- <span id="block4"> </span>
- <span id="block5"> </span>
- <span id="block6"> </span>
- <span id="block7"> </span>
- <span id="block8"> </span>
- <span id="block9"> </span>
- </div>
- </td>
- </tr>
- <tr><td align="center" id="complete"></td></tr>
- </tbody>
- </table>
- </body>
- </html>
-
-
- package cn.Ajax.test;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @SuppressWarnings("serial")
- public class ProgressBarServlet extends HttpServlet {
- private int counter = 1;
- /**
- * The doGet method of the servlet. <br>
- *
- * This method is called when a form has its tag value method equals to get.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String task = request.getParameter("task");
- String res="";
- if(task.equals("create")){
- res = "<key>1</key>";
- counter = 1;
- }
- else{
- String percent = "";
- switch (counter) {
- case 1: percent = "10";break;
- case 2: percent = "23";break;
- case 3: percent = "35";break;
- case 4: percent = "51";break;
- case 5: percent = "64";break;
- case 6: percent = "73";break;
- case 7: percent = "89";break;
- case 8: percent = "100";break;
- }
- counter++;
- res ="<percent>"+percent+"</percent>";
- }
- PrintWriter out = response.getWriter();
- response.setContentType("text/xml");
- response.setHeader("Cache-Control", "no-cache");
- out.println("<response>");
- out.println(res);
- out.println("</response>");
- out.close();
- }
- /**
- * The doPost method of the servlet. <br>
- *
- * This method is called when a form has its tag value method equals to post.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }