From 0b47b5321814dd25503d267e34dde356633df2f5 Mon Sep 17 00:00:00 2001 From: matthieureynier Date: Tue, 23 Jun 2026 09:21:58 +0200 Subject: [PATCH] Correction contact API flotte: id corps_flotte inexistant, deux versions qui se telescopent, brancher fetch sur afficherFlotte --- CORRECTION_api_flotte.md | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 CORRECTION_api_flotte.md diff --git a/CORRECTION_api_flotte.md b/CORRECTION_api_flotte.md new file mode 100644 index 0000000..ec5ba74 --- /dev/null +++ b/CORRECTION_api_flotte.md @@ -0,0 +1,72 @@ +# 🔧 Correction — l'API affiche « Impossible de charger la flotte 😕 » + +Tu y es presque ! Ton `fetch` fonctionne (le fichier est bien servi, statut 200), et tu as Ă©crit du **trĂšs bon** code propre (`createLign`, `afficherFlotte`). Le souci, c'est qu'il y a **deux versions** dans ton `flotte.js` qui ne se parlent pas, et **un id qui ne correspond pas**. On dĂ©mĂȘle. + +--- + +## 1. 🐛 Pourquoi le message d'erreur s'affiche + +Dans `chargerFlotte`, tu vises ce `tbody` : + +```js +const corps = document.getElementById("corps_flotte"); // ❌ cet id n'existe pas +``` + +Mais dans ton HTML, ton tableau de flotte a pour id **`flotte_tableau`** (pas `corps_flotte`). Donc `corps` vaut **`null`**, et un peu plus bas `corps.append(tr)` plante (« on ne peut pas faire `.append` sur `null` »). + +Comme ce `.append` est dans ton `try`, l'erreur est **attrapĂ©e** par le `catch` → qui affiche « Impossible de charger la flotte 😕 ». + +> 🔎 **Donc ton API n'est PAS en cause :** le fichier est bien chargĂ© et transformĂ© (`vehicules` contient tes 3 vĂ©hicules). C'est juste qu'au moment de les **afficher**, tu cherches un Ă©lĂ©ment qui n'existe pas. Pour le voir toi-mĂȘme : dans **F12 → Console**, tu verras l'erreur exacte (`Cannot read properties of null (append)`) loggĂ©e par ton `console.error(erreur)`. + +--- + +## 2. đŸ§© Le vrai souci : tu as Ă©crit **deux fois** l'affichage + +Regarde ton `flotte.js`, tu as en rĂ©alitĂ© **deux mĂ©canismes** : + +**Version A — le `fetch`** (les vraies donnĂ©es du fichier) : +```js +async function chargerFlotte() { + ... fetch ... + for (const v of vehicules) { corps.append(tr); } // vise corps_flotte (inexistant) +} +``` + +**Version B — une copie Ă©crite Ă  la main** (`flotte1`) avec tes belles fonctions : +```js +const flotte1 = [ { modele: "Renault Kangoo", ... }, ... ]; // ← une COPIE en dur +function createLign(car) { ... } +function afficherFlotte(list) { ... } // vise flotte_tableau (qui existe ✅) +afficherFlotte(flotte1); +``` + +RĂ©sultat : ce que tu **vois** Ă  l'Ă©cran, c'est la **version B** (la copie `flotte1`), pas les donnĂ©es venues du fichier. Et la version A Ă©choue dans son coin. Le `fetch` ne sert donc Ă  rien pour l'instant : tu affiches une copie, pas le vrai fichier. + +> 💡 Le but de l'exercice `fetch`, c'est justement de **ne plus** Ă©crire les donnĂ©es en dur (`flotte1`) mais de les **charger depuis `vehicules.json`**. Sinon, autant tout Ă©crire dans le HTML. + +--- + +## 3. ✅ La solution : **brancher** ton fetch sur tes belles fonctions + +Tu as dĂ©jĂ  tout : `createLign` et `afficherFlotte` sont parfaites et visent le **bon** tableau (`flotte_tableau`). Il suffit que `chargerFlotte` **leur passe** les donnĂ©es qu'il a rĂ©cupĂ©rĂ©es, au lieu de réécrire une boucle dans son coin. + +L'idĂ©e (Ă  toi de l'assembler) : +1. Dans `chargerFlotte`, aprĂšs `const vehicules = await reponse.json();`, **appelle `afficherFlotte(vehicules);`** → tes vraies donnĂ©es passent dans ta fonction d'affichage, qui vise le bon `tbody`. +2. **Supprime** la boucle `for (const v of vehicules) { ... corps.append ... }` de `chargerFlotte` (c'est `afficherFlotte` qui fait ce travail maintenant) — et donc la variable `corps` au mauvais id disparaĂźt avec. +3. **Supprime `flotte1`** et le `afficherFlotte(flotte1)` final : tu n'as plus besoin de la copie en dur, c'est le fichier qui fournit les donnĂ©es. +4. Tu peux garder le `message.textContent = vehicules.length + " vĂ©hicules :"` pour le petit compteur. + +> 🔎 En clair : `chargerFlotte` **rĂ©cupĂšre** les donnĂ©es, `afficherFlotte` **les affiche**. Chacun son rĂŽle, et ils se passent le relais avec `afficherFlotte(vehicules)`. C'est exactement le mĂȘme duo que sur ton tableau d'Ă©quipe (`afficherEquipe(liste)`). + +**✅ Test :** le message « Impossible de charger » disparaĂźt, et le tableau affiche les vĂ©hicules **venus de `vehicules.json`**. Pour le prouver : ajoute un 4ᔉ vĂ©hicule **dans le fichier `vehicules.json`** (pas dans le JS), recharge → la 4ᔉ ligne apparaĂźt. Si oui, c'est gagnĂ© : tu affiches bien le fichier, plus une copie. 🎉 + +--- + +## ✅ RĂ©cap + +- [ ] Comprendre : l'erreur venait de l'**id** `corps_flotte` (inexistant), pas de l'API +- [ ] Faire `chargerFlotte` → `afficherFlotte(vehicules)` (brancher le fetch sur ta fonction d'affichage) +- [ ] Supprimer la copie en dur `flotte1` et la boucle en double +- [ ] VĂ©rifier en ajoutant une ligne **dans le JSON** + +HonnĂȘtement tu avais dĂ©jĂ  Ă©crit 90 % du bon code — il ne manquait que de **relier les deux morceaux**. C'est tout l'enjeu quand un fichier grossit : Ă©viter d'avoir deux fois la mĂȘme chose qui se marche dessus.