Formulaire
Avec fetch Il est possible de communiquer simplement des données à un serveur grâce aux objets FormData.
Prenons un formulaire avec un champ texte et un bouton de validation :
<form>
<input name="texte">
<button type="submit">Envoyer</button>
</form>
Au clic sur le bouton, on génère l'objet formData qui contient les données du formulaire
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault();
const formData = new FormData(form);
});
C'est dans le deuxième paramètre de fetch() que l'on transmet sous forme d'objet le formulaire ainsi que la méthode POST.
const url = "traitement.php";
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault();
const formData = new FormData(form);
fetch(url, {
method: "POST",
body: formData,
}).then((response) =>
response.text().then((data) => console.log(data))
);
});
Le fichier de traitement (traitement.php) récupère les valeurs du formulaire et retourne le texte à transmettre au client.
<?php
$texte = $_POST['texte'] ?? "";
echo "j'ai bien reçu le texte : $texte";
Remarque : JSON
Pour récupérer la réponse sous forme de tableau d'objets, nous utilisons JSON.
const url = "traitement.php";
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault();
const formData = new FormData(form);
fetch(url, {
method: "POST",
body: formData,
}).then((response) =>
response.json().then((data) => console.log(data))
);
});
Pour le traitement
<?php
echo json_encode($_POST);
Remarque : FormData
Il existe plusieurs méthodes qui permettent de modifier le FormData :
append(nom, valeur) :ajoute une donnée
delete(nom) : supprime une donnée
get(nom) : retourne la valeur
getAll(nom) : retourne les valeurs d'une clé tableau
has(nom) : vérifie l’existence d'une clé
entries() : retourne la liste des données
keys() : retourne la liste des clés
values() : retourne la liste des valeurs
Pour transmettre un tableau de valeurs la clé doit terminer par [] :
const formData = new FormData;
formData.append('name[]', 1);
formData.append('name[]', 2);
formData.append('name[]', 3);
console.log(formData.getAll('name[]')); // ["1","2","3"]