Découvrir AJAX : charger des données sans recharger la page
Comprendre le fonctionnement d'AJAX, demander des données JSON au serveur avec fetch (et avec jQuery), attendre la réponse avec async et await, et afficher le résultat dans la page.
1Situer
Une application de météo pour les voyageurs affiche la température des grandes villes du Maroc. Les données changent toutes les heures, et recharger toute la page à chaque mise à jour serait lent. Avec AJAX, la page demande seulement les données au serveur, en arrière-plan, et met à jour le tableau pendant que le visiteur continue de lire.
2Comprendre
AJAX : des données sans recharger la page
La page météo est affichée. Le tableau est vide.
1 / 5
Le fonctionnement d’AJAX
AJAX (Asynchronous JavaScript And XML) désigne une technique : JavaScript envoie une requête HTTP en arrière-plan, reçoit des données (aujourd’hui en JSON) et met à jour une partie de la page.
Un événement (clic, saisie, minuterie) déclenche la requête.
Le navigateur envoie la requête au serveur sans quitter la page.
Le serveur répond avec des données.
JavaScript lit les données et modifie le DOM.
Exemples : les suggestions pendant la recherche, le « J’aime » sans rechargement, le chat, les cartes.
fetch, async et await
asyncfunctionchargerMeteo() {
try {
const reponse =awaitfetch('/api/meteo.json'); // 1. requêteif (!reponse.ok) thrownewError(reponse.status); // 2. code HTTPconst donnees =await reponse.json(); // 3. texte JSON → objetfor (const v of donnees.villes) { // 4. mise à jour de la page
corps.innerHTML+=`<tr><td>${v.ville}</td><td>${v.temperature}</td><td>${v.ciel}</td></tr>`;
}
} catch (erreur) {
etat.textContent='Erreur de chargement';
}
}
fetch renvoie une promesse ; await attend sa réalisation (dans une fonction async).
reponse.json() est aussi une promesse.
Une erreur réseau ou un throw est attrapé par catch (leçon B.5).
Avec jQuery
$.getJSON('/api/produits.json', function (produits) {
console.log(`${produits.length} produits`);
});
// forme générale : $.ajax({ url, method: 'POST', data, success, error })
Les règles du jeu
Par sécurité, un navigateur n’autorise une requête vers un autre site que si ce site l’accepte (règle CORS).
Les fichiers /api/meteo.json et /api/produits.json de DevLab sont de simples fichiers d’exemple. Une vraie API (côté serveur, Node.js en 2e année) renvoie des données à jour et accepte aussi POST, PUT, DELETE.
Exemple simple
Commander sans quitter sa table
Au restaurant, vous ne sortez pas pour aller chercher votre plat en cuisine : le serveur s'en charge pendant que vous discutez. AJAX, c'est pareil : la page continue de fonctionner pendant que la requête part et revient.
Exemple simple
Promettre de rappeler
fetch ne renvoie pas les données tout de suite, mais une promesse : « je vous rappelle quand c'est prêt ». Avec await, on attend ce rappel avant de continuer.
Le site DevLab fournit un petit fichier de données d'exemple : /api/meteo.json. Chargez-le avec fetch et affichez les villes dans le tableau. Ouvrez /api/meteo.json dans un nouvel onglet pour voir son contenu.
○Avec fetch et await, chargez /api/meteo.json et affichez la date des données dans la console (2027-03-15)
○Ajoutez une ligne au tableau pour chacune des 6 villes
○Les villes à moins de 10 °C ont la classe froid (Ifrane)
○Gérez l'erreur : avec try / catch, chargez /api/inconnu.json et affichez « Erreur de chargement » dans #etat
○Avec jQuery, chargez /api/produits.json ($.getJSON) et affichez le nombre de produits dans la console (« 5 produits »)
4Pratiquer
Exercice 1 · Lire le code de réponse
fetch ne lance pas d'erreur pour une réponse 404. Comment la détecter ?
Voir le corrigé
const reponse =awaitfetch('/api/inconnu.json');
if (!reponse.ok) { // ok est false si le code n'est pas 2xxthrownewError(`Erreur ${reponse.status}`); // 404
}
const donnees =await reponse.json();
Exercice 2 · Envoyer des données
Écrivez la requête qui envoie l'inscription { prenom: 'Salma', email: 'salma@gmail.com' } en JSON à l'adresse /api/inscriptions avec la méthode POST.
Voir le corrigé
const reponse =awaitfetch('/api/inscriptions', {
method:'POST',
headers: { 'Content-Type':'application/json' },
body:JSON.stringify({ prenom:'Salma', email:'salma@gmail.com' }),
});
// Il faut un vrai serveur pour recevoir ces données (Node.js, PHP...).
Exercice 3 · Avec .then
Réécrivez le chargement de la météo avec .then au lieu de async / await.