최근 프로젝트에서 장거리 파일 전송 및 저장과 같은 작업을 수행할 때 페이지에 백분율이 표시된 진행률 표시줄을 표시하여 사용자에게 좋은 대화형 경험을 제공할 수 있습니다. Ajax 기반으로 소개할 예제 코드 진행률 표시줄의 효과를 백분율로 표시하려면 필요한 친구들이 참고하면 됩니다
요구사항: 장거리 파일 전송, 저장 등의 작업을 수행할 때 진행률 표시줄에 사용자에게 좋은 대화형 경험을 제공하기 위해 페이지에 백분율을 표시할 수 있습니다
JSP 페이지
1. 테이블 태그 추가<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>
이 테이블 태그는 다음과 같은 경우 숨겨지고 표시되어야 합니다. 진행 표시줄이 실행됩니다. 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() 메소드 참고: 코드 세그먼트는 복잡한 비즈니스에서 포인트로 나눌 수 있으며, 포인트의 진행률은 몇 퍼센트이며 저장됩니다. 그런 다음 ajax를 통해 서비스를 호출하여 세션에서 값을 가져오고 진행 상황을 반환하고 표시합니다. Effect Summary 백분율이 표시된 진행률 표시줄은 실제로 저장 중에 여러 스레드를 열기 위해 ajax를 사용하여 구현됩니다. 스레드는 저장 작업을 수행합니다. 1. 백분율을 계산하여 세션에 넣습니다. 2. 스레드가 끝나면 세션을 지웁니다. 또 다른 스레드, 세션에서 콘텐츠 비율 가져오기: 1. ajax를 사용하여 결과를 반환하고 페이지에 표시합니다. 이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. , 다른 PHP 중국어 웹사이트 관련 기사를 주목해 주세요! 추천 자료: 위 내용은 Ajax는 백분율로 진행률 표시줄을 생성합니다(코드 첨부).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!/**
* @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";
}