ajax做出带百分比的进度条(附代码)

最近做项目遇到这样的需求要求当进行文件长传保存等操作时,能在页面显示一个带百分比的进度条,给用户一个好的交互体验,下面通过实例代码给大家介绍基于ajax实现带百分比进度条效果,需要的的朋友参考下吧

需求:当进行文件长传保存等操作时,能在页面显示一个带百分比的进度条,给用户一个好的交互体验

实现步骤

JSP页面

1.添加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 = "" + percentInt + "";    }    //此时说明操作的业务方法已经执行完毕,session中的值已经被清空    else{      //存放百分比      res = "" + 100 + "";    }    //定义ajax的返回结果是XML的形式    PrintWriter out = response.getWriter();    response.setContentType("text/xml");    response.setHeader("Cache-Control", "no-cache");    //存放结果数据,例如:88    out.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);    }    //线程结束,清空session    request.getSession().removeAttribute("percent");    return "save";  }

登录后复制

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

效果

ajax做出带百分比的进度条(附代码)

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

ajax做出带百分比的进度条(附代码)

总结

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

一个线程,执行保存的操作:

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

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

另一个线程,从session中获取百分比的内容:

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

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

用history让ajax支持前进/后退/刷新

Ajax方法实现Form表单提交的方法

以上就是ajax做出带百分比的进度条(附代码)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2777039.html

(0)
上一篇 2025年3月8日 14:59:40
下一篇 2025年3月8日 14:59:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • AJAX与JavaScript的使用详解

    这次给大家带来AJAX与JavaScript的使用详解,AJAX与JavaScript使用的注意事项有哪些,下面就是实战案例,一起来看一下。 AJAX不是JavaScript的规范,它只是一个哥们“发明”的缩写:Asynchronous J…

    2025年3月8日
    200
  • JavaScript怎么使用ajax操作表单

    这次给大家带来JavaScript怎么使用ajax操作表单,JavaScript使用ajax操作表单的注意事项有哪些,下面就是实战案例,一起来看一下。 用JavaScript操作表单和操作DOM是类似的,因为表单本身也是DOM树。 不过表单…

    编程技术 2025年3月8日
    200
  • 怎样用Ajax提交表单并接收其中的json数据

    这次给大家带来怎样用Ajax提交表单并接收其中的json数据,用Ajax提交表单并接收其中json数据的注意事项有哪些,下面就是实战案例,一起来看一下。 需求: 实现点击按钮后,数据以表单形式提交至服务器,并接收来自服务器的返回数据。过程中…

    编程技术 2025年3月8日
    200
  • 使用Ajax时Json-lib如何处理

    这次给大家带来使用Ajax时Json-lib如何处理,使用Ajax时Json-lib处理的注意事项有哪些,下面就是实战案例,一起来看一下。 无论是使用ajax还是使用easyui等框架,后台向前台输出数据时都涉及到json处理的问题,这里介…

    编程技术 2025年3月8日
    200
  • 使用AJAX实现分页功能

    这次给大家带来使用AJAX实现分页功能,使用AJAX实现分页功能的注意事项有哪些,下面就是实战案例,一起来看一下。 最近写一个给用户组添加角色的功能,要求一边是未添加的角色,一边是已添加的角色,还有搜索功能, 点击添加后,ajax保存操作.…

    2025年3月8日
    200
  • 如何实现AJAX的分页效果

    这次给大家带来如何实现AJAX的分页效果,实现AJAX分页效果的注意事项有哪些,下面就是实战案例,一起来看一下。 最近写一个给用户组添加角色的功能,要求一边是未添加的角色,一边是已添加的角色,还有搜索功能, 点击添加后,ajax保存操作. …

    2025年3月8日
    200
  • ajax跨域问题的图文详解(附代码)

    这次给大家带来ajax跨域问题的图文详解(附代码),ajax跨域问题的注意事项有哪些,下面就是实战案例,一起来看一下。 跨域 同源策略限制 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必…

    2025年3月8日 编程技术
    200
  • Ajax技术的核心以及方法属性

    这次给大家带来Ajax技术的核心以及方法属性,使用Ajax技术核心以及方法属性的注意事项有哪些,下面就是实战案例,一起来看一下。 一、什么是Ajax Ajax英文全称为“ Asynchr JavsScript and XML”(异步的Jav…

    2025年3月8日
    200
  • 在Ajax里怎么传递特殊字符数据

    这次给大家带来在Ajax里怎么传递特殊字符数据,在Ajax里传递特殊字符数据的注意事项有哪些,下面就是实战案例,一起来看一下。 问题描述 如下,对含有特殊字符的text进行JSON封装,通过Ajax传递, var data = {&#822…

    编程技术 2025年3月8日
    200
  • ajax怎样传递数组到后台

    这次给大家带来ajax怎样传递数组到后台,ajax传递数组到后台的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 我们在使用ajax异步的提交多选框得到需要操作的对象的id,这时我们可以把每一个id做出一个对象,之后放到一个数组中,…

    2025年3月8日
    200

发表回复

登录后才能评论