Java|java教程
ajax,百分比,简单
Java-java教程
需求:当进行文件长传保存等操作时,能在页面显示一个带百分比的进度条,给用户一个好的交互体验
河北源码科技有限公司,vscode怎么设置虚线边框,阿里云 ubuntu源,tomcat日志 太大,sqlite增删,优秀网页设计提案,主机屋数据库地址,虚拟服务器客户端,phpcms多模型相关文章插件,dva框架前端,爬虫走运动,php ddos,宁波seo哪家好,基础库springboot,dede程序h1标签怎么加,mssql 爆网站路径,吉他网页制作模板,html flash模板,dedecms顽固木马后台专杀工具,h5手机页面模板源码,帝国网站管理系统做小说网站,微赞 授权码补丁程序lzw
实现步骤
JSP页面
网站源码库 百度云盘,vscode设置默认字符集,ubuntu弹出光盘,tomcat输入项目名称,php爬虫并发,php 顺丰接口,福建抖音seo搜索排名案例lzw
1.添加table标签
这个table标签要隐藏,进度条执行的时候再显示。id为tdOne和tdTwo分别为进度条的蓝色和灰色区域。
易语言自动骂人源码,ubuntu线程切换时间,厕所地上爬虫子,php 转义 <,廉江seo推广lzw
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 = "" + percentInt + ""; }//此时说明操作的业务方法已经执行完毕,session中的值已经被清空else{//存放百分比res = "" + 100 + ""; }//定义ajax的返回结果是XML的形式PrintWriter out = response.getWriter(); response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache");//存放结果数据,例如:88out.println(""); out.println(res); out.println(""); 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清空。
另一个线程,从session中获取百分比的内容:
1.使用ajax将结果返回并显示在页面上
如果觉得《分享用ajax实现带百分比进度条的实例教程》对你有帮助,请点赞、收藏,并留下你的观点哦!