Créer un objet XMLHttpRequest
Sommaire
- 1- Objectifs
- 2- Présentation
- 3- Comment cela fonctionne?
- 4- Réaliser un appel Ajax
- 4.1- Page HTML
- 4.2- Javascript : Appel Ajax
- 4.3- Programme côté serveur
- 5- Création de l’objet XMLHttpRequest
- 5.1- Construire une requête, pas à pas
- 5.2- La méthode open
- 6- Activités
- 6.1- Activité 01
- 6.2- Énoncé
- 6.3- Solution
- 6.4- Activité 02
- 6.5- Énoncé
- 6.6- Solution
- 6.6.1- Sommaire du cours JavaScript
- 6.6.2- Sommaire du cours AJAX
Créer un objet XMLHttpRequest
-
Objectifs
- ِComprendre l’objet XMLHTTPRequest.
-
Présentation
- XMLHttpRequest est l’objet sur lequel AJAX est fondé. Il s’agit d’un objet Javascript dont le rôle est d’échanger les données entre le client et le serveur sans que la page ne soit entièrement rechargée.
- La quasi-totalité des navigateurs, d’aujourd’hui, reconnaissent l’objet XMLHttpRequest.
- Le principe de fonctionnement d’XMLHttpRequest est d’envoyer une requête HTTP vers le serveur, et une fois la requête envoyée, les données renvoyées par le serveur peuvent être récupérées.
- Pour instancier (créer, déclarer) un objet XHR, on procède de la même façon que pour n’importe quel objet JavaScript à savoir avec le mot-clé new :
- Le code précédent est un test préliminaire qui vérifie si le navigateur supporte l’objet natif XMLHttpRequest. Dans l’affirmative, l’objet XMLHttpRequest est créé.
-
Comment cela fonctionne?
- Pour recueillir des informations sur le serveur l’objet XHR dispose de deux méthodes:
- open: établit une connexion.
- send: envoie une requête au serveur.
- Les données fournies par le serveur seront récupérées dans les champs de l’objet XMLHttpRequest:
- responseXml pour un fichier XML ou
- responseText pour un fichier de texte bru.
- Il faut attendre la disponibilité des données, et l’état est donné par l’attribut readyState de XMLHttpRequest.
- Les états de readyState sont les suivants (seul le dernier est vraiment utile):
- 0: non initialisé.
- 1: connexion établie.
- 2: requête reçue.
- 3: réponse en cours.
- 4: terminé.
-
Réaliser un appel Ajax
- Pour réaliser un appel Ajax, vous avez besoin de trois éléments :
- Une page HTML, qui contiendra le nécessaire pour déclencher l’appel Ajax et qui permettra la prise en compte du résultat.
- Un script Javascript, pour réaliser l’appel et la récupération du résultat
- Un programme côté serveur, qui sera chargé du traitement PHP dans ses exemples.
- Éventuellement, vous pouvez aussi utiliser une feuille de style CSS et intégrer le code Javascript directement à la page HTML
-
Page HTML
- Pour notre exemple, la page HTML qui intégrera des fonctionnalités Ajax permet :
- L’appel à une portion de code Javascript qui réalisera l’appel ; Ceci peut être fait lors du clic sur un lien, par exemple
- L’affichage du résultat de l’appel ; dans un élément
div
, par exemple - Voici le lien qui appellera la fonction JS déclenchant l’appel :
- Et le bloc au sein duquel sera affiché le résultat de celui-ci :
-
Javascript : Appel Ajax
- Pour effectuer une requête asynchrone au serveur en utilisant l’objet
XMLHttpRequest
, nous allons toujours devoir suivre 4 étapes : - On crée un objet XMLHttpRequest.
- On initialise notre requête, c’est à dire on choisit le mode d’envoi des données, l’URL à demander, etc.
- On définir quelle fonction devra être appelée lors d’un événement sur cet objet (envoie de la requête).
- On crée des gestionnaires d’événements pour prendre en charge la réponse du serveur.
- ligne 1 : on crée une instance de l’objet XMLHTTPRequest
- ligne 2 : on spécifie la méthode de transmission des données, l’URL et le mode de transmission de la requête.
- ligne 3 : on exécute la requête proprement dite ;
- Cette méthode prend un paramètre, qui peut valoir :
null
, dans le cas où l’appel se fait enGET
- Une liste de paramètres, de la forme "
param1=valeur1¶m2=valeur2¶m3=valeur3
", quand l’appel se fait enPOST
- ligne 4 : on affiche une boîte d’alerte dès que la requête est terminée.
- L’objet
xhr_object
possède une propriétéreadyState
qui prend successivement 5 valeurs récapitulées dans la liste suivante représentant les valeurs et leurs descriptions: 0
(uninitialized): Objet non initialisé1
(loading): Début du transfert des données2
(loaded): Données transférées3
(interactive): Données reçues sont accessibles en partie4
(complete): Données sont complètement accessibles-
Programme côté serveur
- C’est le programme qui sera appelé
if(window.XMLHttpRequest)
{
var xhr = new XMLHttpRequest();
}
<a href="" onclick="gestionClic(); return false;">
Cliquez ici !
</a>
<div id="resultat">
valeur avant l'appel Ajax
</div>
Exemple
var xhr_object = new XMLHttpRequest();
xhr_object.open("GET", location.href, false);
xhr_object.send(null);
if (xhr_object.readyState == 4) alert("Requête effectuée !");
objetXMLHttpRequest.open(methode, urlEtParams, async);
Methode
: en général, ‘GET’ ou ‘POST’. Détermine quel type de requête HTTP sera utilisée pour l’appel Ajax.urlEtParams
: l’URL du programme qui sera exécuté, argument (obligatoire) représente l’URL de destination de la requête, c’est-à-dire l’URL où on souhaite envoyer notre requête, éventuellement suivie d’une liste de paramètre, si l’on est en GET.async
: true pour déclencher un appel en arrière-plan (asynchrone); false pour un appel synchrone bloquant le navigateur.Création de l’objet XMLHttpRequest
-
Construire une requête, pas à pas
- Première étape: créer une instance
- C’est juste une instance de classe classique mais deux options à essayer pour compatibilité avec les navigateurs.
- ou plus simplement, on peut utiliser les exceptions:
- Seconde étape: attendre la réponse
- Le traitement de la réponse et les traitements qui suivent sont inclus dans une fonction, et la valeur de retour de cette fonction sera assignée à l’attribut
onreadystatechange
de l’objet précédemment créé. - Troisième étape: faire la requête elle-même
- Deux méthodes de XMLHttpRequest sont utilisées:
- open: commande GET ou POST, URL du document, true pour asynchrone.
- send: avec POST seulement, données à envoyer au serveur.
- La requête ci-dessous lit un document sur le serveur.
-
La méthode open
- La méthode open démarre la connexion, en mode lecture ou écriture, pour recevoir des données du serveur ou lui en envoyer. Ce sera traité sur le serveur par un langage coté serveur comme PHP, Java, etc…
- La connexion passe par plusieurs états successifs qui sont assignés à l’attribut readyState de l’objet.
- Soit un test préliminaire qui vérifie si le navigateur supporte l’objet natif XMLHttpRequest. Dans l’affirmative, l’objet XMLHttpRequest est créé.
- Pour simplifier l’utilisation de cet objet, en crée une fonction qui retournera l’objet XMLHttpRequest instancié.
if (window.XMLHttpRequest) // Objet standard
{
xhr = new XMLHttpRequest(); // Firefox, Safari, ...
}
else if (window.ActiveXObject) // Internet Explorer
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
try
{
xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Essayer IE
}
catch(e) // Echec, utiliser l'objet standard
{
xhr = new XMLHttpRequest();
}
xhr.onreadystatechange = function()
{
// instructions de traitement de la réponse
};
if (xhr.readyState == 4)
{
// Reçu, OK
}
else
{
// Attendre...
}
xhr.open('GET', 'https://www.xul.fr/fichier.xml', true);
xhr.send(null);
//Création de l'objet XmlHttpRequest(XHR)
function nouveauXHR(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();/*Pour instancier (créer, déclarer) un objet XHR, on procède de la même façon que pour n'importe quel objet JavaScript à savoir avec le mot-clé new*/
else if(window.ActiveXObject) {// Internet Explorer
try{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
} else {// XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
function getXMLHttpRequest() {
//Création de l'objet XmlHttpRequest(XHR)
var xhr = null;
if (window.XMLHttpRequest || window.ActiveXObject) {
if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
} else {
xhr = new XMLHttpRequest();
}
} else {
alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
return null;
}
return xhr;
}
Activités
-
Activité 01
-
Énoncé
- Dans cette activité, on va afficher 6 messages en guise de titre <h1> pour le premier, titre <h2> pour le deuxième etc…
- La fonction qui exécute AJAX sera appelée suite au clic sur un bouton classique, et le message à afficher sera envoyé en tant que paramètre avec la requête.
- La page qui contient le script Javascript/AJAX s’appelle AJAX_act1.html et la page qui contient la réponse sera écrite en PHP et nommée AJAX_act1.php.
-
Solution
- Essayez de faire l’activité de votre côté avant de regarder la Solution !
-
Activité 02
-
Énoncé
- Dans activité vous êtes appelés à créer une petite application en (HTML,JS,PHP) et l’api XMLHttpRequest, lorsqu’un utilisateur tape un caractère dans le champ de saisie, une fonction appelée « devoilerIndice() » est exécutée.
- La fonction est déclenchée par l’événement onkeyup.
- La figure suivante est une représentation de votre application
- Travail demandé:
- Créez trois fichiers différents AJAX_act2.html, AJAX_act2.js et AJAX_act2.php
- Tout d’abord, vérifiez si le champ de saisie est vide (str.length == 0). Si tel est le cas, effacez le contenu de l’espace réservé « txtDevoiler » et quittez la fonction.
- Cependant, si le champ de saisie n’est pas vide, procédez comme suit:
- Créez un objet XMLHttpRequest
- Créez la fonction à exécuter lorsque la réponse du serveur est prête
- Envoyez la requête vers un fichier PHP (AJAX_act2.php) sur le serveur avec la méthode « GET«
-
Solution
- Essayez de faire l’activité de votre côté avant de regarder la Solution !