Adloun

Jusqu'ici, envoyer une donnée au serveur remplaçait la page

Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 10 — Interagir sur le Web · Ce que la page fait toute seule

Énoncé

Jusqu'ici, envoyer une donnée au serveur remplaçait la page. Voici l'autre façon de faire.


const bouton = document.getElementById("charger");

bouton.addEventListener("click", async function () {
    const reponse = await fetch("/api/meteo?ville=Nantes");
    const donnees = await reponse.json();
    document.getElementById("temp").textContent = donnees.temperature;
});

Corrigé

1. La page n'est pas remplacée. Une requête part, la réponse arrive, et seul le paragraphe temp change. Tout le reste — les champs déjà remplis, la position dans la page, l'état des menus — est conservé, et l'écran ne clignote pas. C'est ce qu'on appelle une requête asynchrone : le programme n'attend pas, il indique quoi faire quand la réponse arrivera.

2. Deux pertes, et ce sont exactement les avantages du GET du cours :

3. En l'état, rien de visible : la promesse échoue, une erreur s'inscrit dans la console que personne ne lit, et l'utilisateur regarde un paragraphe qui ne change pas. Il faut traiter les deux cas d'échec — le réseau qui ne répond pas, et le serveur qui répond une erreur.


bouton.addEventListener("click", async function () {
    const cible = document.getElementById("temp");
    cible.textContent = "chargement...";
    try {
        const reponse = await fetch("/api/meteo?ville=Nantes");
        if (!reponse.ok) {
            throw new Error("le serveur a repondu " + reponse.status);
        }
        const donnees = await reponse.json();
        cible.textContent = donnees.temperature;
    } catch (erreur) {
        cible.textContent = "meteo indisponible";
    }
});

Le point le plus souvent manqué : reponse.ok est nécessaire. Un 404 ou un 500 sont des réponses reçues, non des échecs réseau : fetch les considère comme des succès et n'entre pas dans le catch. Sans ce test, on tenterait de lire du JSON dans une page d'erreur HTML.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.