logo oujood
🔍

L'événement onreadystatechange en AJAX : Guide Complet pour Gérer les Requêtes Asynchrones

Apprenez à utiliser l'événement onreadystatechange de l'objet XMLHttpRequest pour intercepter et traiter les réponses du serveur en temps réel. Découvrez comment surveiller le readyState, gérer les codes status et implémenter des fonctions de callback réutilisables.

OUJOOD.COM

Comprendre l'événement onreadystatechange en AJAX

JavaScript cours tutorial

Avant d'envoyer une requête HTTP asynchrone au serveur, il est essentiel de préparer une fonction de traitement capable de réceptionner et de gérer les données retournées.
Cette fonction spéciale agit comme un gestionnaire d'événements qui capture automatiquement les informations envoyées par le serveur en réponse à votre requête AJAX.
L'objet XMLHttpRequest possède une propriété cruciale nommée onreadystatechange, qui constitue le cœur de la communication asynchrone en AJAX.
La propriété onreadystatechange stocke une référence vers la fonction qui sera automatiquement exécutée pour traiter chaque étape de la réponse du serveur.
Le code suivant illustre comment définir une fonction vide et l'assigner simultanément à la propriété onreadystatechange de votre objet XMLHttpRequest.
Nous enrichirons progressivement cette fonction tout au long de cette leçon, en explorant les différentes propriétés et méthodes de l'objet XMLHttpRequest pour construire des applications AJAX robustes et performantes.

/* Création d'une fonction gestionnaire pour recevoir les données du serveur */
jaxRequest.onreadystatechange = function(){
// Cette fonction sera automatiquement appelée à chaque changement d'état
// Nous implémenterons ici la logique de traitement des réponses
}

La propriété onreadystatechange agit comme un écouteur d'événements qui surveille en permanence l'évolution de la requête. Comme son nom l'indique explicitement :
Cette fonction callback sera automatiquement déclenchée et exécutée chaque fois que la propriété readyState change de valeur, permettant ainsi un suivi précis de la progression de votre requête AJAX.

Lorsqu'une requête HTTP asynchrone est transmise au serveur web, votre application doit être capable de réagir intelligemment aux différentes étapes du cycle de vie de cette requête et d'effectuer des actions spécifiques selon la réponse reçue.

L'objet XMLHttpRequest dispose d'une autre propriété fondamentale appelée readyState, qui stocke l'état actuel de la communication avec le serveur.
À chaque modification de la valeur readyState, le gestionnaire d'événements onreadystatechange est automatiquement invoqué, vous permettant de réagir en temps réel à chaque étape du processus.
L'événement onreadystatechange se déclenche automatiquement à chaque transition d'état du readyState, offrant ainsi un contrôle granulaire sur le traitement de vos requêtes asynchrones.

La propriété readyState détermine précisément à quelle étape du cycle de vie se trouve votre requête XMLHttpRequest, permettant d'adapter votre code en conséquence.

Trois propriétés essentielles de l'objet XMLHttpRequest à maîtriser pour une gestion efficace des requêtes AJAX :

Propriété Description technique détaillée
onreadystatechange Contient une fonction callback (ou le nom d'une fonction) qui sera invoquée automatiquement et de manière asynchrone chaque fois que la propriété readyState change de valeur, permettant de suivre la progression de la requête HTTP
readyState Propriété en lecture seule contenant le statut actuel de la requête XMLHttpRequest. Sa valeur évolue de 0 à 4 selon les étapes :
0: UNSENT - Requête non initialisée, objet créé mais open() non appelé
1: OPENED - Connexion au serveur établie, méthode open() appelée
2: HEADERS_RECEIVED - Requête envoyée et en-têtes reçus
3: LOADING - Traitement en cours, réception partielle des données
4: DONE - Opération terminée, réponse complète disponible
status Code de statut HTTP retourné par le serveur :
200: OK - Requête réussie, données disponibles
404: Not Found - Ressource demandée introuvable
500: Internal Server Error - Erreur serveur interne
403: Forbidden - Accès refusé

Dans le cadre de ce tutoriel AJAX, nous nous concentrerons principalement sur l'état readyState = 4 (DONE), qui indique que la réponse du serveur est complète et que les données sont prêtes à être récupérées et exploitées. Nous allons donc ajouter une instruction conditionnelle dans notre fonction callback pour vérifier systématiquement si la réponse est totalement chargée avant de la traiter.

/* Fonction gestionnaire pour traiter les données reçues du serveur */
jaxRequest.onreadystatechange = function(){
// Vérification double : réponse complète (readyState==4) ET succès HTTP (status==200)
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// La réponse est complète et valide
// Récupération des données via responseText ou responseXML
// Exécution du traitement métier (affichage, parsing JSON, mise à jour DOM)
}
}

Dans le gestionnaire d'événements onreadystatechange, nous définissons précisément le comportement de notre application lorsque la réponse du serveur web est entièrement reçue et prête à être traitée par notre code JavaScript.

Lorsque la propriété readyState atteint la valeur 4 ET que le code status est égal à 200, cela signifie que la réponse HTTP est complète, valide et exploitable :

Exemple pratique : Affichage de la réponse serveur dans le DOM

Pour les applications AJAX simples et les requêtes de base, vous pouvez facilement récupérer la réponse textuelle du serveur en utilisant la propriété responseText de l'objet XMLHttpRequest. L'exemple suivant démontre comment utiliser du JavaScript vanilla pour injecter dynamiquement le contenu de la propriété responseText dans un élément HTML possédant l'identifiant id="monDiv", permettant ainsi une mise à jour du DOM sans rechargement de page.

Exemple :     📋 Copier le code

// Définition du gestionnaire d'événements pour la requête AJAX
xmlhttp.onreadystatechange=function()
{
// Vérification que la réponse est complète (readyState==4)
// ET que le serveur a renvoyé un code de succès (status==200)
if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
  // Injection du contenu de la réponse dans l'élément HTML cible
  // responseText contient la réponse sous forme de chaîne de caractères
  document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }
}

Note importante : L'événement onreadystatechange est déclenché à quatre reprises au minimum lors d'une requête AJAX standard, une fois pour chaque transition de la propriété readyState (de 1 à 4). Il est donc crucial de toujours vérifier à la fois le readyState et le status avant d'exécuter votre logique de traitement.


Utilisation d'une fonction de rappel (Callback Function) pour réutiliser le code AJAX

Une fonction de rappel (ou callback) est une fonction JavaScript passée comme paramètre à une autre fonction, permettant ainsi une exécution différée et une meilleure modularité du code.

Si vous développez plusieurs fonctionnalités AJAX au sein de votre application web, il est fortement recommandé de créer une fonction standard réutilisable pour la création et la configuration de l'objet XMLHttpRequest. Cette fonction peut ensuite être invoquée pour chaque tâche AJAX distincte, évitant ainsi la duplication de code et facilitant la maintenance.

L'appel de cette fonction générique doit obligatoirement contenir au minimum deux paramètres : l'URL de la ressource à requêter et la fonction callback définissant le comportement lors de l'événement onreadystatechange (qui varie généralement selon le contexte d'utilisation de chaque requête AJAX) :

Exemple : Fonction AJAX réutilisable avec callback personnalisé

Exemple :     📋 Copier le code

// Fonction principale qui déclenche une requête AJAX
function myFunction()
{
// Appel de la fonction générique loadXMLDoc avec deux paramètres :
// 1. L'URL du fichier à charger ("ajax_info.txt")
// 2. Une fonction callback anonyme pour traiter la réponse
loadXMLDoc("ajax_info.txt",function()
  {
  // Vérification de l'état de la requête et du code HTTP
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    // Mise à jour dynamique du contenu de l'élément myDiv
    // avec la réponse texte reçue du serveur
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}

Cours precedent:
  Réponse du serveur
    Sommaire de :
Le langage JavaScript
 Cours suivant:
AJAX et PHP    

Par carabde | Publié le 22 août 2014 | Mis à jour le 17 novembre 2025