• 技术文章 >Java >java教程

    分享用ajax实现带百分比进度条的实例

    零下一度零下一度2017-07-17 14:08:50原创1168
    这篇文章主要介绍了jQuery实现的简单百分比进度条效果,结合简单实例形式分析了jQuery针对页面元素的运算与动态操作相关操作技巧,需要的朋友可以参考下

    JSP页面

    1.添加table标签

    <table id="load" width="700" border="0" align="center" bgcolor="#FAFAFA" cellpadding="0" cellspacing="0" bordercolor="#000000" style="border-collapse:collapse;display:none ">  <tr><td><br><br><table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolor="#287BCE" style="border-collapse:collapse "><tr bgcolor="#F7F7F6">  <td width="20%" height="100" valign="middle"><table align='center' width='500'>  <tr>   <td colspan='2' align='center' id="progressPersent"><font size="2">正在进行保存,用时较长,请稍后...</font>   </td>  </tr>  <tr><td id='tdOne' height='25' width=1 bgcolor="blue">&nbsp;</td><td id='tdTwo' height='25' width=500 bgColor='#999999'>&nbsp;</td>  </tr></table>  </td></tr></table></td>  </tr></table> 

      这个table标签要隐藏,进度条执行的时候再显示。id为tdOne和tdTwo分别为进度条的蓝色和灰色区域。

    2.添加js代码

    /**添加带百分比的进度条*/var xmlHttp;//创建ajax引擎function createXMLHttpRequest() {      if (window.XMLHttpRequest) {
              xmlHttp = new XMLHttpRequest();
            } else if (window.ActiveXObject) {          try {
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
              } catch (e1) {try {
                      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e2) {
                    }
              }
            }
        }    function loading() {
            createXMLHttpRequest();
            clearLoad();var url = "elecCommonMsgAction_progressBar.do";
            xmlHttp.open("GET", url, true);
            xmlHttp.onreadystatechange = createCallback;
            xmlHttp.send(null);
        }    function createCallback() {if (xmlHttp.readyState == 4) {if (xmlHttp.status == 200) {//每隔1秒钟执行一次percentServer()方法,直到当前访问结束setTimeout("percentServer()", 1000);
                }
            }
        }    function percentServer() {
            createXMLHttpRequest();var url = "elecCommonMsgAction_progressBar.do";
            xmlHttp.open("GET", url, true);
            xmlHttp.onreadystatechange = updateCallback;
            xmlHttp.send(null);
        }    function updateCallback() {if (xmlHttp.readyState == 4) {if (xmlHttp.status == 200) {//获取XML数据中的percent存放的百分比的值var percent_complete = xmlHttp.responseXML.getElementsByTagName("percent")[0].firstChild.data;var tdOne = document.getElementById("tdOne");var progressPersent = document.getElementById("progressPersent");//改变蓝色区域的宽度tdOne.width = percent_complete + "%";//将百分比的数值显示到页面上progressPersent.innerHTML = percent_complete + "%";//如果计算获取的百分比的数值没有达到100,则继续调用方法,直到操作结束为止if (percent_complete < 100) {
                        setTimeout("percentServer()", 1000);
                    }
                }
            }
        } function clearLoad() {
            document.getElementById("load").style.display="";
            document.getElementById("opperate1").style.display="none";
            document.getElementById("opperate2").style.display="none";
        }

      当点击保存时,执行loading()方法。

    Action类

    progressBar()方法

    /**  
        * @throws Exception 
         * @Name: progressBar
        * @Description: 在页面执行保存后,使用ajax,计算执行的百分比情况,将结果显示到页面上
        * @Parameters: 无
        * @Return: ajax如果不需要跳转页面,返回null或者NONE*/public String progressBar() throws Exception{//从session中获取操作方法中计算的百分比Double percent = (Double) request.getSession().getAttribute("percent");
            String res = "";//此时说明操作的业务方法仍然继续在执行if(percent!=null){//计算的小数,四舍五入取整int percentInt = (int) Math.rint(percent); 
                res = "<percent>" + percentInt + "</percent>";
            }//此时说明操作的业务方法已经执行完毕,session中的值已经被清空else{//存放百分比res = "<percent>" + 100 + "</percent>";
            }//定义ajax的返回结果是XML的形式PrintWriter out = response.getWriter();
            response.setContentType("text/xml");
            response.setHeader("Cache-Control", "no-cache");//存放结果数据,例如:<response><percent>88</percent></response>out.println("<response>");
            out.println(res);
            out.println("</response>");
            out.close();return null;
    
        }

    save()方法

    /**  
        * @Name: save
        * @Description: 保存表单数据到数据库
        * @Parameters: 无
        * @Return: String:重定向到system/actingIndex.jsp再查询*/public String save(){//模拟:循环保存150次,方便观察百分比变化for(int i=1;i<=150;i++){
                elecCommonMsgService.saveCommonMsg(elecCommonMsg);//保存数据request.getSession().setAttribute("percent", (double)i/150*100);
            }//线程结束,清空sessionrequest.getSession().removeAttribute("percent");return "save";
        }

      注意:可以在复杂的业务中将代码段分成点,一个点的进度是占百分之多少,然后存放到Session中,然后通过ajax调用服务从Session中获取值,返回进度并显示即可。


    效果

      输入数据,点击【保存】时:


    总结

      带百分比的进度条,实际上是用ajax在保存中开启多个线程实现的:

        1.将百分比计算出来,放到session中;

        2.在线程结束的时候,将session清空。

        1.使用ajax将结果返回并显示在页面上

    以上就是分享用ajax实现带百分比进度条的实例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:ajax 百分比 简单
    上一篇:共享模式与基于Condition的等待/通知实例详解 下一篇:RPC框架的实例详解
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一文掌握JAVA 面向对象之多态• 完全掌握Java锁(图文解析)• 深入解析Java中的方法引用• 实例详解Java基础的控制语句• Java集合框架之PriorityQueue优先级队列
    1/1

    PHP中文网