Ajax制作Web进度条

1.index.jsp

  1 <%@ page language="java" pageEncoding="UTF-8"%>

  2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

  3 <html>

  4   <head>

  5     <script type="text/javascript" language="javaScript">

  6       var bgcolor = '#7FFF00'; //全局变量,用于设置进度条的背景色

  7       var number; //全局变量,用于记录当前span序号

  8       var clear = "&nbsp;&nbsp;&nbsp;"; //全局变量,记录清空时的内容

  9       var xmlHttp = false; //全局变量,用于记录XMLHttpRequest对象

 10       function createXMLHttpRequest() { //创建XMLHttpRequest对象的方法

 11         if(window.ActiveXObject) { //Inetrnet Explorer时,创建XMLHttpRequest对象的方法

 12           try {

 13             xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

 14           } catch(e) {

 15             try {

 16               xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

 17                //旧版本的Inetrnet Explorer,创建XMLHttpRequest对象

 18             } catch(e) {

 19               window.alert("创建XMLHttpRequest对象错误"+e);

 20             } 

 21           }

 22         } else if(window.XMLHttpRequest) { //mozilla时,创建XMLHttpRequest对象的方法

 23           xmlHttp = new XMLHttpRequest();

 24         } 

 25         if(!(xmlHttp)) { //未成功创建XMLHttpRequest对象

 26             window.alert("创建XMLHttpRequest对象异常!");

 27         }  

 28       }

 29 

 30       //启动进度条的方法

 31       function startRun() {

 32         createXMLHttpRequest(); //创建XMLHttpRequest对象

 33         clearBar(); //执行请求前先清除进度条

 34         xmlHttp.onreadystatechange = callBack;

 35         //指定onreadystatechange属性值,用于指定状态正常时的处理函数

 36         xmlHttp.open("GET", "/ProgressTest/servlet/ProcessServlet?flag=start", true);

 37         xmlHttp.send(null);

 38       }

 39       

 40       //开始进行进度条显示的处理函数

 41       function callBack() {

 42           //window.alert("callBack()");

 43         if(xmlHttp.readyState == 4) {

 44            if(xmlHttp.status == 200) { //status状态正常时

 45              setTimeout("aginRun()",1000);

 46             //每隔1000毫秒(1秒)执行一次“aginRun()”函数

 47            }

 48         }

 49       }

 50 

 51       //清除用于显示进度条的span的内容

 52       function clearBar() {

 53         for (var i=0;i<10;i++) { //根据span元素的id,分别清楚其显示内容

 54           var sp = document.getElementById("sp" + i);

 55           sp.innerHTML = clear; //首先清空span元素的内容

 56           sp.style.backgroundColor = "white"; //设置span元素的背景色

 57         }

 58       }

 59       //设置用于显示进度条的span元素的显示内容

 60       function aginRun() {

 61         createXMLHttpRequest(); //创建XMLHttpRequest对象

 62         xmlHttp.onreadystatechange = aginCallBack;

 63         //指定状态正常时的处理函数为“aginCallBack”

 64         document.getElementById("run").disabled=true; //设置按钮不可用

 65         xmlHttp.open("GET", "/ProgressTest/servlet/ProcessServlet?flag=run", true);

 66         //window.alert(" " + number);

 67         xmlHttp.send(null);

 68       }

 69 

 70       //进度条执行时的函数

 71       function aginCallBack() {

 72         if(xmlHttp.readyState==4) {

 73           if(xmlHttp.status==200) {

 74             var percent = 

 75             xmlHttp.responseXML.getElementsByTagName("percent")[0].firstChild.data;

 76            //记录当前完成比例

 77             var index = parseResult(percent); //解析结果集

 78             var nextCell = 1;

 79             for (var i=0; i<index; i++) { //遍历span元素集合,设置其内容(颜色与文字)

 80               var sp = document.getElementById("sp"+i);

 81             //根据每个span元素的id获取span对象

 82               sp.innerHTML= clear; //清空span元素内容

 83               sp.style.backgroundColor = bgcolor; //设置span元素的内容

 84               nextCell = i+1;

 85               if(nextCell>=index && nextCell<10) { //显示当前处理进度的百分比

 86                 document.getElementById("sp"+nextCell).innerHTML=percent+"%";

 87               }

 88             }

 89             if(index<10) { //索引小于10,设置setTimeout方法

 90                setTimeout("aginRun()",1000);

 91             } else { //索引大于10,设置进度条成功完成的页面效果

 92                document.getElementById("result").innerHTML = "OK!";

 93                document.getElementById("run").disabled = false;

 94             }

 95           }

 96         }

 97       }

 98 

 99       //解析结果集

100       function parseResult(result) {

101         if(result.length<1) {

102           return 1;

103         } else if(result.length==2) {

104           return result.substring(0,1);

105         } else {

106           return 10;

107         }

108       }

109     </script>

110     <title>Ajax进度条</title>

111   </head>

112   <body>

113    <table align="center">

114             <tr>

115               <td>Ajax进度条示例&nbsp;&nbsp;&nbsp;<input type="button" value="开始" id="run" onclick="startRun();"/></td>

116             </tr>

117             <tr>

118               <td>

119               <div id="processBar" style="padding:1px;border:solid black 1px;">

120                <span id="sp0">&nbsp;&nbsp;&nbsp;</span>

121                <span id="sp1">&nbsp;&nbsp;&nbsp;</span>

122                <span id="sp2">&nbsp;&nbsp;&nbsp;</span>

123                <span id="sp3">&nbsp;&nbsp;&nbsp;</span>

124                <span id="sp4">&nbsp;&nbsp;&nbsp;</span>

125                <span id="sp5">&nbsp;&nbsp;&nbsp;</span>

126                <span id="sp6">&nbsp;&nbsp;&nbsp;</span>

127                <span id="sp7">&nbsp;&nbsp;&nbsp;</span>

128                <span id="sp8">&nbsp;&nbsp;&nbsp;</span>

129                <span id="sp9">&nbsp;&nbsp;&nbsp;</span>

130               </div>

131               </td>

132             </tr>

133             <tr><td align="center" id="result"></td> </tr>

134     </table>

135   </body>

136 </html>

2.ProcessServlet.java

 1 public class ProcessServlet extends HttpServlet {

 2     

 3     private static final String CONTENT_TYPE = "text/xml; charset=UTF-8";

 4 //设置返回响应的ContentType

 5     private int count = 1;// 全局变量计数器

 6     /**

 7      *当前Servlet对象构造方法

 8      */

 9     public ProcessServlet() {

10         super();

11     }

12     /**

13      *当前Servlet销毁时的操作。<br>

14      */

15     public void destroy() {

16         super.destroy();

17     }

18     /**

19      *当前Servlet的doGet方法。<br>

20      *

21      *当客户端表单的“method”类型为“get”时,调用此方法

22      * 

23      * @param request客户端请求对象

24      * @param response 服务器响应对象

25      * @throws ServletException 发生ServeltException时抛出

26      * @throws IOException发生IOException时抛出

27      */

28     public void doGet(HttpServletRequest request, HttpServletResponse response)

29             throws ServletException, IOException {

30         System.out.println("*********************doGet()**********");

31         response.setContentType(CONTENT_TYPE); //设置服务器响应类型

32         response.setHeader("Cache-Control","no-cache"); //页面不记录缓存

33         String flag = request.getParameter("flag"); //操作类型

34         StringBuffer xml= 

35 //            new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?><items>");

36             new StringBuffer("<items>");

37         //记录返回的xml串

38         if("start".equals(flag)) { //第一次创建

39 //            xml.append("<count>1</count>");

40             count = 1;

41         } else {

42             String proportion = "";

43             switch(count) { //根据计数器的值,设置显示当前进度的百分比

44               case 1:proportion="10"; break;

45               case 2:proportion="20"; break;

46               case 3:proportion="30"; break;

47               case 4:proportion="40"; break;

48               case 5:proportion="50"; break;

49               case 6:proportion="60"; break;

50               case 7:proportion="70"; break;

51               case 8:proportion="80"; break;

52               case 9:proportion="90"; break;

53               case 10:proportion="100"; break;

54             }

55             count++;

56             xml.append("<percent>").append(proportion).append("</percent>");

57         }

58         xml.append("</items>");

59         PrintWriter out = response.getWriter();

60         out.println(xml.toString()); //返回生成的XML串

61         out.flush(); //输出流刷新

62         out.close(); //关闭输出流

63         System.out.println("*********** " + xml.toString());

64     }

65 

66     /**

67      * 初始化servlet. <br>

68      * @throws ServletException 发生ServletExcpetio异常时抛出

69      */

70     public void init() throws ServletException {

71     }

72 }

3.web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>

 2 <web-app version="2.5" 

 3     xmlns="http://java.sun.com/xml/ns/javaee" 

 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 7     <servlet>

 8     <servlet-name>ProcessServlet</servlet-name>

 9     <servlet-class>wen.ProcessServlet</servlet-class>

10   </servlet>

11   <servlet-mapping>

12     <servlet-name>ProcessServlet</servlet-name>

13     <url-pattern>/servlet/ProcessServlet</url-pattern>

14   </servlet-mapping>

15     

16   <welcome-file-list>

17     <welcome-file>index.jsp</welcome-file>

18   </welcome-file-list>

19 </web-app>

 

 

你可能感兴趣的:(Ajax)