Maison > Article > interface Web > Ajax crée une barre de progression avec un pourcentage (code ci-joint)
J'ai récemment rencontré une telle exigence lorsque je travaillais sur un projet. Lors de l'exécution d'opérations telles que le transfert et l'enregistrement de fichiers longue distance, une barre de progression avec un pourcentage peut être affichée sur la page pour donner à l'utilisateur une bonne expérience interactive. Voici un exemple Le code vous présente l'effet d'une barre de progression avec un pourcentage basé sur ajax. Les amis qui en ont besoin peuvent s'y référer
Exigence : lors de l'exécution d'opérations telles que long-. transfert et enregistrement de fichiers à distance, une barre de progression avec un pourcentage peut être affichée sur la page Une bonne expérience interactive pour les utilisateurs
Étapes de mise en œuvre
Page JSP
1. Ajouter une balise de 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>Cette balise de table doit être masquée et affichée lorsque la barre de progression est exécutée. Les ID tdOne et tdTwo sont respectivement les zones bleues et grises de la barre de progression. 2. Ajoutez du code 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"; }Lorsque vous cliquez sur Enregistrer, exécutez la méthode chargement().
Classe d'action
Méthode 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; }Méthode 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"; }Remarque : dans les affaires complexes, le segment de code peut être divisé en points. La progression de chaque point correspond à quel pourcentage, puis stockée dans la session. Appelez ensuite le service via ajax pour obtenir la valeur de la session, renvoyez la progression. et affichez-le. Effet Lors de la saisie des données et en cliquant sur [Enregistrer] :
Résumé
La barre de progression avec pourcentage est en fait implémentée en utilisant ajax pour ouvrir plusieurs threads lors de l'enregistrement : Un thread effectue l'opération de sauvegarde : 1. Calculez le pourcentage et mettez-le dans la session 2. Effacez la session à la fin du fil de discussion. Un autre fil de discussion, récupérez le pourcentage de contenu de la session : 1. Utilisez ajax pour renvoyer les résultats et les afficher sur la page Je crois que vous l'avez maîtrisé après lire le cas dans cet article Pour des méthodes plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php ! Lecture recommandée :Utiliser l'historique pour permettre à Ajax de prendre en charge l'avance/le retour/l'actualisation
Méthode Ajax pour implémenter Form Méthode de soumission du formulaire
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!