La API FormData
Recopile datos de formularios mediante programación con la interfaz FormData
La API FormData es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.
Qué es FormData
FormData es un objeto integrado que representa los campos de un formulario y sus valores, adecuado para enviarlos directamente mediante fetch o XMLHttpRequest. Gestiona cargas de archivos, codificación multipart y pares clave-valor arbitrarios sin serialización manual.
Construir a partir de un formulario
Pase un elemento <form> al constructor: const data = new FormData(formElement). El resultado contiene todos los controles de formulario que participan en el envío (inputs con nombre, selects, textareas, casillas marcadas y archivos). Los controles deshabilitados y las casillas sin marcar se excluyen automáticamente.
document.forms.checkout.addEventListener("submit", async (e) => {
e.preventDefault();
const data = new FormData(e.target);
await fetch("/api/checkout", { method: "POST", body: data });
});Enviar con fetch
Pasar FormData como body de fetch establece automáticamente el Content-Type de la solicitud en multipart/form-data (con el boundary correcto). No establezca Content-Type manualmente: fetch necesita generar el boundary por sí mismo.
Añadir, establecer y eliminar
data.append(key, value) añade una clave (permite duplicados). data.set(key, value) reemplaza cualquier valor existente para esa clave. data.delete(key) elimina todos los valores de una clave. data.has(key) comprueba si está presente.
const data = new FormData();
data.append("tag", "html");
data.append("tag", "css");
console.log(data.getAll("tag")); // ["html", "css"]Cargas de archivos
FormData gestiona los archivos de forma transparente: data.append("avatar", fileInput.files[0]). El servidor recibe una carga multipart con el nombre y el tipo MIME del archivo. Esta es la forma estándar de cargar archivos con fetch en el código moderno.
Iterar
FormData es iterable: for (const [key, value] of data) { ... }. Use data.entries(), data.keys() y data.values() para realizar iteraciones específicas. Resulta útil para registrar datos, validarlos o construir una copia JSON del formulario.
Convertir a JSON
Para enviarlo como JSON en lugar de multipart: Object.fromEntries(data) produce un objeto simple, pero pierde las claves duplicadas. Para gestionarlas correctamente, recorra las entradas y agrúpelas manualmente. En API de JSON puras, es más sencillo construir el objeto directamente sin pasar por FormData.
Población programática
Construya un FormData vacío y añada los valores manualmente: const data = new FormData(); data.append("title", title); data.append("file", file);. Resulta útil al enviar datos que no proceden de un formulario (archivos arrastrados, respuestas de API, cargas generadas).
Detección del botón de envío
Si existen varios botones de envío, pase el botón que inició el envío como segundo argumento de FormData: new FormData(form, e.submitter). El nombre y el valor de ese botón se incluyen en los datos, algo importante en formularios con varias acciones.
Alternativa relacionada: URLSearchParams
Para la codificación application/x-www-form-urlencoded (la codificación predeterminada de los formularios sin archivos), construya un URLSearchParams a partir de FormData: new URLSearchParams(data). Es más eficiente que multipart para formularios que solo contienen texto.
Error habitual
Establecer explícitamente la cabecera Content-Type de fetch en "multipart/form-data" rompe la carga: el navegador ya no puede añadir el boundary necesario. Omita Content-Type al enviar FormData y deje que fetch lo gestione.
Comprobación de conocimientos
¿Por qué NO debe establecer manualmente Content-Type al enviar FormData con fetch?
Resumen
FormData representa el contenido de un formulario y se envía correctamente con fetch, incluidas las cargas de archivos mediante multipart/form-data. Constrúyalo a partir de un elemento de formulario, añada, establezca o elimine entradas e itérelo según sea necesario. No establezca Content-Type al enviarlo: fetch genera el boundary automáticamente. Use URLSearchParams para formularios urlencoded que solo contengan texto.
Preguntas frecuentes
¿La lección «La API FormData» es gratis?
Sí — el texto completo de «La API FormData» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.
¿Qué aprenderé en «La API FormData»?
Recopile datos de formularios mediante programación con la interfaz FormData Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar HTML Academy?
No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «La API FormData»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de HTML Academy?
Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La API FormData
- La Constraint Validation API
- reportValidity y setCustomValidity
- Eventos de restablecimiento de formularios y gestión del estado