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

实现步骤
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"> </td>
<td id='tdTwo' height='25' width=500 bgColor='#999999'> </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小时内与您取得联系。