Correction services CORS: ouvrir via http (python http.server) au lieu de file://, chemin fetch css/vehicules.json, tbody corps_flotte manquant
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# 🔧 L'erreur « CORS policy » sur ton `fetch`
|
||||
|
||||
Rassure-toi : ton code `fetch` n'est **pas** faux. Cette erreur n'a rien à voir avec ta logique — c'est juste **la façon dont tu ouvres la page**.
|
||||
|
||||
---
|
||||
|
||||
## Pourquoi ça arrive
|
||||
|
||||
Tu ouvres `services.html` en **double-cliquant** dessus → l'adresse commence par `file://`. Or `fetch` **refuse** de lire un fichier quand la page est en `file://` : le navigateur considère ça comme non sécurisé et bloque avec un message « CORS policy ».
|
||||
|
||||
`fetch` veut une adresse en **`http://`**. Il faut donc « servir » ton dossier avec un mini-serveur.
|
||||
|
||||
---
|
||||
|
||||
## La solution (1 commande)
|
||||
|
||||
Dans un terminal, place-toi à la **racine du projet** et lance :
|
||||
|
||||
```bash
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
|
||||
Puis, dans le navigateur, ouvre :
|
||||
|
||||
```
|
||||
http://localhost:8000/pages/services.html
|
||||
```
|
||||
|
||||
(et **pas** le fichier en double-clic). L'adresse est maintenant en `http://` → `fetch` fonctionne, l'erreur CORS disparaît. Pour arrêter le serveur : `Ctrl + C`.
|
||||
|
||||
> 💡 **À retenir :** « CORS policy » sur un `fetch` de fichier local = tu as ouvert la page en `file://`. La réponse est presque toujours : **passe par un petit serveur** (`python3 -m http.server`). C'est aussi ce que fait un vrai site : un serveur envoie les fichiers.
|
||||
|
||||
---
|
||||
|
||||
## Deux détails à corriger pendant que tu y es
|
||||
|
||||
Une fois le CORS réglé, il te restera deux petits trucs sinon ça ne s'affichera toujours pas :
|
||||
|
||||
### 1. Le chemin du fichier
|
||||
```js
|
||||
const reponse = await fetch("vehicules.json"); // cherche pages/vehicules.json
|
||||
```
|
||||
Le chemin est calculé **depuis la page** (`pages/services.html`), pas depuis `devis.js`. Ton fichier est dans `pages/css/`, donc :
|
||||
```js
|
||||
const reponse = await fetch("css/vehicules.json"); // ✅
|
||||
```
|
||||
(C'est cohérent avec ta balise `<script src="css/devis.js">` : même point de départ.)
|
||||
|
||||
### 2. Le tableau d'accueil manque
|
||||
Ton code fait `corps.append(...)` sur `document.getElementById("corps_flotte")`, mais il n'y a **pas** de `corps_flotte` dans ton HTML — juste `<p id="message_flotte">`. Ajoute un tableau pour recevoir les lignes :
|
||||
```html
|
||||
<table border="1">
|
||||
<tbody id="corps_flotte"></tbody>
|
||||
</table>
|
||||
```
|
||||
Sans ça, `corps` vaut `null` et `corps.append(...)` plante (c'est d'ailleurs ce plantage qui déclenche ton message « bahahaha mimimimimi » 😄).
|
||||
|
||||
---
|
||||
|
||||
## ✅ Récap
|
||||
|
||||
- [ ] Lancer `python3 -m http.server 8000` puis ouvrir `http://localhost:8000/pages/services.html`
|
||||
- [ ] `fetch("css/vehicules.json")` (bon chemin depuis la page)
|
||||
- [ ] Ajouter `<tbody id="corps_flotte">` dans un `<table>`
|
||||
|
||||
Avec ces trois choses, ta flotte s'affiche. Le CORS, c'est vraiment juste l'histoire du `file://` vs `http://` — rien de plus à comprendre.
|
||||
Reference in New Issue
Block a user