Lors du processus d'installation et de téléchargement des applications, l'utilisation de barres de progression est devenue très courante. La barre de progression peut être utilisée pour indiquer l'avancement du projet. Elle peut être exprimée en pourcentage ou en nombre et peut être placée horizontalement. Utilisez la technologie Ajax pour créer une barre de progression, ce qui rend la fonction plus puissante et plus rapide.
Créez maintenant un exemple pour démontrer l'utilisation de la technologie Ajax pour implémenter une barre de progression. Cet exemple peut également être divisé en code client et code serveur.
1, code serveur
Le code du serveur implémente principalement les informations de demande d'un client et renvoie le pourcentage correspondant. Ouvrez le Bloc-notes et saisissez le code suivant :
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%! int counter = 1;//注意:多用户将共享此变量,此进度条只适合单用户 %> <% String task = request.getParameter("task"); String res = ""; if (task.equals("create")) { res = "1"; counter = 1; } else { String percent = ""; switch (counter) { case 1: percent = "10"; break; case 2: percent = "23"; break; case 3: percent = "35"; break; case 4: percent = "51"; break; case 5: percent = "64"; break; case 6: percent = "73"; break; case 7: percent = "89"; break; case 8: percent = "100"; break; } counter++; res = "<percent>" + percent + "</percent>"; } // PrintWriter out = response.getWriter(); response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); out.println("<response>"); out.println(res); out.println("</response>"); out.close(); %>
<html> <head> <title>JSP+Ajax 进度条</title> <script type="text/javascript"> var xmlHttp; var bar_color = 'blue'; var span_id = "yellow"; var clear = " " function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } function go() { createXMLHttpRequest(); checkDiv(); var url = "ProgressBarJsp.jsp?task=create"; xmlHttp.open("GET", url, true); xmlHttp.onreadystatechange = goCallback; xmlHttp.send(null); } function goCallback() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { setTimeout("pollServer()", 2000); } } } function pollServer() { createXMLHttpRequest(); var url = "ProgressBarJsp.jsp?task=poll"; xmlHttp.open("GET", url, true); xmlHttp.onreadystatechange = pollCallback; xmlHttp.send(null); } function pollCallback() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { var percent_complete = xmlHttp.responseXML.getElementsByTagName("percent")[0].firstChild.data; var index = processResult(percent_complete); for (var i = 1; i <= index; i++) { var elem = document.getElementById("block" + i); elem.innerHTML = clear; elem.style.backgroundColor = bar_color; var next_cell = i + 1; if (next_cell > index && next_cell <= 9) { document.getElementById("block" + next_cell).innerHTML = percent_complete + "%"; } } if (index < 9) { setTimeout("pollServer()", 2000); } else { document.getElementById("complete").innerHTML = "网站已完成加载!"; } } } } function processResult(percent_complete) { var ind; if (percent_complete.length == 1) { ind = 1; } else if (percent_complete.length == 2) { ind = percent_complete.substring(0, 1); } else { ind = 9; } return ind; } function checkDiv() { var progress_bar = document.getElementById("progressBar"); if (progress_bar.style.visibility == "visible") { clearBar(); document.getElementById("complete").innerHTML = ""; } else { progress_bar.style.visibility = "visible" } } function clearBar() { for (var i = 1; i < 10; i++) { var elem = document.getElementById("block" + i); elem.innerHTML = clear; elem.style.backgroundColor = "white"; } } </script> </head> <body onload="go();"> <h1 align=center>网站正在加载中,请稍候</h1> <p> <table align="center"> <tbody> <tr><td> <div id="progressBar" style="padding:2px;border:solid yellow 2px;visibility:hidden"> <span id="block1"> </span> <span id="block2"> </span> <span id="block3"> </span> <span id="block4"> </span> <span id="block5"> </span> <span id="block6"> </span> <span id="block7"> </span> <span id="block8"> </span> <span id="block9"> </span> </div> </td></tr> <tr><td align="center" id="complete"></td></tr> </tbody> </table> </body> </html>
Enregistrez le code ci-dessus sous JspprogressBar.html. Dans ce fichier, la fonction JavaScript createXMLHttpRequest() est principalement utilisée pour créer un objet XMLHttpRequest. La fonction go() termine l'envoi d'une requête asynchrone au serveur. Cette fonction est appelée lors du chargement de la page web. le serveur et démarrez sur le client. Exécutez la barre de progression. La fonction GoCallback() est principalement utilisée pour traiter la réponse du serveur, et la fonction pollServer() est appelée toutes les 2 secondes. Elle est également utilisée pour envoyer des requêtes asynchrones au serveur, demandant principalement le pourcentage de la réponse du serveur. La fonction PollCallback() est principalement utilisée pour traiter la réponse côté serveur, c'est-à-dire pour spécifier l'état d'affichage de la barre de progression en fonction du nombre renvoyé par le côté serveur. Il convient de noter ici que la fonction goCallback() n'est exécutée qu'une seule fois, tandis que la fonction PollCallback() peut être exécutée plusieurs fois. Les trois fonctions restantes sont des fonctions auxiliaires pour implémenter la barre de progression.
3, cours
Copiez les deux fichiers Jsp ci-dessus dans le répertoire JSP. Le diagramme d'effet de fonctionnement est le suivant :