全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用Ajax实现简单的带百分比进度条实例

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

实现步骤

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);
    }
    //线程结束,清空session
    request.getSession().removeAttribute("percent");
    return "save";
  }

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

效果

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

总结

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

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

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

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

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

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

以上所述是小编给大家介绍的使用Ajax实现简单的带百分比进度条实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# ajax百分比进度条  # ajax进度条  # PHP+Ajax无刷新带进度条图片上传示例  # PHP+Ajax异步带进度条上传文件实例  # 使用AJAX实现Web页面进度条的实例分享  # 基于HTML5 Ajax实现文件上传并显示进度条  # js HTML5 Ajax实现文件上传进度条功能  # 基于HTML5 Ajax文件上传进度条如何实现(jquery版本)  # js ajax加载时的进度条代码  # 进度条  # 清空  # 小编  # 多个  # 在此  # 不需要  # 能在  # 给大家  # 分别为  # 跳转  # 表单  # 正在进行  # 较长  # 每隔  # 所述  # 给我留言  # 感谢大家  # 操作方法  # 请稍后  # 重定向 


相关文章: 建站主机是什么?如何选择适合的建站主机?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  黑客如何通过漏洞一步步攻陷网站服务器?  XML的“混合内容”是什么 怎么用DTD或XSD定义  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  建站之星后台密码如何安全设置与找回?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何在Golang中使用replace替换模块_指定本地或远程路径  高端智能建站公司优选:品牌定制与SEO优化一站式服务  高端建站三要素:定制模板、企业官网与响应式设计优化  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  如何自定义建站之星网站的导航菜单样式?  教程网站设计制作软件,怎么创建自己的一个网站?  如何解决VPS建站LNMP环境配置常见问题?  如何登录建站主机?访问步骤全解析  香港服务器WordPress建站指南:SEO优化与高效部署策略  建站主机是否属于云主机类型?  seo网站制作优化,网站SEO优化步骤有哪些?  实例解析angularjs的filter过滤器  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站主机无法访问?如何排查域名与服务器问题  建站之星CMS建站配置指南:模板选择与SEO优化技巧  建站之星安装步骤有哪些常见问题?  家庭服务器如何搭建个人网站?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  如何选择最佳自助建站系统?快速指南解析优劣  建站之星安装路径如何正确选择及配置?  网站制作报价单模板图片,小松挖机官方网站报价?  如何在阿里云部署织梦网站?  如何快速搭建二级域名独立网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  深圳网站制作培训,深圳哪些招聘网站比较好?  香港服务器租用费用高吗?如何避免常见误区?  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站VPS能否同时实现高效与安全翻墙?  活动邀请函制作网站有哪些,活动邀请函文案?  电商网站制作公司有哪些,1688网是什么意思?  如何获取上海专业网站定制建站电话?  如何选择服务器才能高效搭建专属网站?  如何快速搭建高效香港服务器网站?  Android使用GridView实现日历的简单功能  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何快速打造个性化非模板自助建站?  南平网站制作公司,2025年南平市事业单位报名时间?  如何规划企业建站流程的关键步骤?  怎么将XML数据可视化 D3.js加载XML  如何做静态网页,sublimetext3.0制作静态网页? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。