L’utilisation d’AJAX ( Asynchronous JavaScript and XML ) permet de modifier ponctuellement une page Web sans avoir à la recharger, ce qui améliore sensiblement le temps de réponse dans des applications telles que la mise à jour d’un compte-tours affiché sur un smartphone.
Pour se familiariser avec
le HTML
https://www.w3schools.com/html/defa...
En Français https://openclassrooms.com/fr/cours...
l’ESP 32 en serveur et un navigateur pour client, voir http://a110a.free.fr/SPIP172/articl...
Ce schéma en provient :
Un exemple simple de page Web minimale va être analysé.
Cette page a été générée pour un navigateur connecté en WiFi à un ESP 32 qui exécutait le logiciel ESP_32_AJAX_Demo_210119, fourni ci après.
Au démarrage, la page affiche :
"LEDState is : NA "(Not Available).
Un clic sur le bouton LED ON affiche "LEDState is : ON", un clic sur le bouton LED OFF affiche "LEDState is : OFF".
1 Le serveur envoie la page Web complète, c’est à dire le code HTML pour le texte et la mise en page, le code JavaScript pour les actions à réaliser.Noter que ce transfer de page n’aura lieu qu’une fois, au démarrage.
2 L’utilisateur clic sur un des deux boutons, auxquels sont associés la fonction sendData(led), le paramètre led valant 0 ou 1 selon le bouton.
Cette action déclenche une requête vers le serveur
3 La fonction sendData(led) crée un objet XMLHttpRequest(), puis une chaîne contenant la valeur 1/0 du bouton concerné est émise vers le serveur.
4 Le serveur la récupère, et la décode
5 Preparation de la chaîne s de réponse, contenant ON/OFF
6 Emission vers le client
7 La transaction s’étant bien déroulée, LEDState est mis à jour avec ON/OFF
Cette page est lisible depuis le navigateur avec un clic-droit, "Code source de la page".
Ne pas se laisser impressionner si on connait peu le HTML et pas du tout le JavaScript (qui n’a rien à voir avec le JAVA) : les lignes cruciales seront détaillées une à une dans la suite.
LEDState pourra prendre les valeurs "NA" ou "ON" ou "OFF".
Pour une modification, une requête est envoyée au serveur (ESP 32).
Ici la requête est déclenchée par un clic sur l’un des boutons : LED ON ou LED OFF (lignes 6 et 7).
Nota : Contrainte de cet éditeur de texte, hélas, les caractères "inférieur", "supérieur" et les "accolades" ne sont pas affichables.
function sendData(led)
Si le bouton LED ON a été cliqué led=1, si LED OFF led=0.
var xhttp = newXMLHttpRequest()
Création de l’ objet xhttp de type newXMLHttpRequest , type reconnu par tous les navigateurs (Firefox, Chrome, etc), et qui vivra jusqu’à la fin du traitement complet de la requête.
Bien que le nom de l’objet comporte XML, ici il sera utilisé pour du texte simple (plain).
Cet objet est riche de plusieurs méthodes et propriétés selon la terminologie de la programmation Objet. Celles-ci sont détaillées en Annexe.
xhttp.onreadystatechange = function() if (this.readyState == 4 && this.status == 200)
C’est du condensé !
A chaque changement de valeur de reasyState (de 0 à 4) on vérifie si
reasyState = 4 ET que status = 200
Si c’est le cas la requête s’est bien terminée, on peut apporter la modification à LEDState par la ligne suivante :
document.getElementById("LEDState").innerHTML =
this.responseText ;
Là encore c’est du compacte !
Affecter à LEDState ( repéré par "id" à l’intérieur de cette page ) la chaine reçue du serveur sous forme de texte.
xhttp.open("GET", "setLED ?LEDState="+led, true) ;
Initialiser la requête : traitement de type "GET", "setLED ?LEDState="+led veut dire "la valeur actuelle, suite au clic, est fournie par "led"", true signifie "asynchrone".
xhttp.send() ;
Envoyer la requête au serveur
Pour l’installation de la bibliothèque ESP 32/8266 voir
https://randomnerdtutorials.com/dow...
et https://circuits4you.com/2018/02/04...
Méthode newXMLHttpRequest()
Création de l’objet XMLHttpRequest
Méthode open spécifie le type de requête, ici GET, asynchrone c’est à dire que le client ne se met pas en attente de la réponse du serveur, il la traitera quand elle arrivera.
Méthode send Envoie la requête au serveur
Propriété readyState
Sa valeur varie de
— 0 "objet créé mais non initialisé"
— à 4, ’la chaîne venant du serveur a été reçue’
C’est cette dernière valeur qui nous intéresse.
Propriété status
Peut prendre au moins 4 valeurs : 200= "OK,Tout va bien", 403 = "Forbidden", 404 = "Not Found"(la classique Page non trouvée). C’est la valeur 200 qui nous intéresse.
Propriété onreadystatchange
C’est une fonction qui s’execute à chaque changement de valeur de readyState
Propriété responseText
Fonction qui met sous forme de chaine la valeur à mettre à jour