Maison >Java >javaDidacticiel >Partagez un exemple de didacticiel sur l'utilisation d'Ajax pour implémenter une barre de progression en pourcentage

Partagez un exemple de didacticiel sur l'utilisation d'Ajax pour implémenter une barre de progression en pourcentage

零下一度
零下一度original
2017-07-03 11:40:001448parcourir

 Exigence : 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 offrir à l'utilisateur une bonne expérience interactive

É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=&#39;center&#39; width=&#39;500&#39;>  
<tr>   
<td colspan=&#39;2&#39; align=&#39;center&#39; id="progressPersent">
<font size="2">正在进行保存,用时较长,请稍后...</font>  
 </td>  
</tr>  <tr><td id=&#39;tdOne&#39; height=&#39;25&#39; width=1 bgcolor="blue"> 
</td>
<td id=&#39;tdTwo&#39; height=&#39;25&#39; width=500 bgColor=&#39;#999999&#39;> 
</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);
        }//线程结束,清空sessionrequest.getSession().removeAttribute("percent");return "save";
    }

 Remarque : dans les affaires complexes, le segment de code peut être divisé en points, la progression de chaque point est le pourcentage, puis stocké dans Session, puis appelez le service via ajax pour obtenir la valeur de Session, renvoyez la progression et affichez-la.


Effet

 Lors de la saisie des données et du clic sur [Enregistrer] :


Résumé

 La barre de progression avec pourcentage est en fait enregistrée à l'aide d'ajax Implémenté en ouvrant plusieurs threads :

  • Un thread, effectuez l'opération enregistrée :

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn