Aller au contenu

FormData JavaScript

Dans le développement web moderne, la gestion efficace des données de formulaire est cruciale pour créer des expériences utilisateur dynamiques et interactives. JavaScript offre un outil puissant pour gérer les données de formulaire grâce à l'API FormData. Dans ce guide, nous explorerons en profondeur FormData, ses capacités, sa syntaxe et les meilleures pratiques pour son implémentation.

Comprendre FormData

FormData est un objet JavaScript intégré qui vous permet de capturer les données de formulaire et de les structurer sous forme de paires clé-valeur. Il simplifie le processus de récupération des informations provenant des formulaires HTML et leur envoi asynchrone au serveur à l'aide de l'API fetch.

Création d'objets FormData

Pour créer un objet FormData, il suffit de l'instancier à l'aide du constructeur FormData(). Vous pouvez également afficher tout le contenu d'une instance FormData en appelant la méthode entries. Cette méthode retourne un objet Iterator, où chaque membre contient une clé et une valeur :


html
<script>
  function onSubmit(event) {
    event.preventDefault();
    const form = document.getElementById('myForm');
    const formData = new FormData(form);
    let results = '';
    for (const [key, value] of formData.entries()) {
      results += `${key}: ${value}\n`;
    }
    alert(results)
  }
</script>
<form id="myForm" onsubmit="onSubmit(event)">
  <input type="text" name="username" value="John Doe" />
  <input type="email" name="email" value="[email protected]" />
  <input type="submit" />
</form>

Accès aux données du formulaire

Vous pouvez accéder aux champs individuels d'un formulaire en utilisant la méthode get() ou parcourir tous les champs à l'aide de entries(), comme vous l'avez vu dans l'exemple précédent.


html
<form id="myForm" onsubmit="onSubmit(event)">
  <input type="text" name="username" value="John Doe" />
  <input type="email" name="email" value="[email protected]" />
  <input type="submit" />
</form>
<script>
  function onSubmit(event) {
    const form = document.getElementById('myForm');
    const formData = new FormData(form);
    const username = formData.get('username');
    const email = formData.get('email');
    alert(`username: ${username}; email: ${email}`);
  }
</script>

Envoi de FormData avec l'API Fetch

L'un des cas d'utilisation les plus courants pour FormData est l'envoi asynchrone des données de formulaire au serveur. Nous pouvons y parvenir facilement à l'aide de l'API Fetch :


html
<form id="myForm" onsubmit="onSubmit(event)">
  <input type="text" name="title" value="A title" />
  <input type="text" name="body" value="A body" />
  <input type="submit" value="Submit Post" />
</form>
<div>post id: <span id="response"></span></div>
<script>
  function onSubmit(event) {
    event.preventDefault();
    const form = document.getElementById('myForm');
    const formData = new FormData(form);
    const responseSpan = document.getElementById('response');
    fetch('https://jsonplaceholder.typicode.com/posts', {
        method: 'POST',
        body: formData
    })
      .then(response => response.json())
      .then(data => { responseSpan.innerHTML = data.id; })
      .catch(error => console.error('Error:', error));
  }
</script>

attention

Lorsque vous passez votre formulaire au constructeur FormData, il inclut automatiquement tous les champs du formulaire HTML, y compris les champs masqués. Cela peut entraîner un comportement inattendu si vous n'y prenez pas garde, en particulier s'il existe des champs sensibles ou inutiles dans le formulaire.

Gestion des téléchargements de fichiers

FormData excelle dans la gestion des téléchargements de fichiers, ce qui en fait un outil essentiel pour les développeurs web qui traitent les champs de saisie de fichiers dans les formulaires. Voyons comment nous pouvons gérer les téléchargements de fichiers à l'aide de FormData :


html
<form id="fileUploadForm">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>
<script>
    const form = document.getElementById('fileUploadForm');
    form.addEventListener('submit', (event) => {
        event.preventDefault();
        const formData = new FormData(form);
        const fileInput = document.querySelector('input[type="file"]');
        const file = fileInput.files[0];
        if (file) formData.append('file', file);
        fetch('https://httpbin.org/post', {
            method: 'POST',
            body: formData
        })
        .then(response => response.json())
        .then(data => console.log('Upload successful:', data))
        .catch(error => console.error('Error:', error));
    });
</script>

Conclusion

FormData est un outil polyvalent et puissant pour gérer les données de formulaire dans les applications JavaScript. Qu'il s'agisse de gérer de simples saisies de texte ou des téléchargements de fichiers complexes, FormData simplifie le processus et offre une interface pratique pour interagir avec les données de formulaire. En maîtrisant FormData, vous pouvez améliorer l'interactivité et la réactivité de vos applications web, offrant ainsi une expérience utilisateur fluide.

Pratique

Quel est un avantage de l'utilisation de l'objet FormData en JavaScript ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.