Explicación completa del API FormData para la gestión de datos de formularios en JavaScript

FormData en JavaScript se utiliza principalmente para dos propósitos:

  • Serializar los datos de los elmeentos de un formulario combinando sus nombres y valores, lo que simplifica el manejo y reduce la necesidad de concatenación manual.
  • Permitir la carga asíncrona de archivos, como imágenes o documentos, en el servidor.

Creación de un objeto FormData

Generación de una instancia vacía

Se puede crear un objeto FormData sin parámetros utilizando su constructor. Luego, se emplean métodos como agregar para insertar datos y obtener para recuperarlos.

// Instancia vacía de FormData
const datosFormulario = new FormData();

// Agregar datos con el método agregar
datosFormulario.agregar("nombre", "Pedro");

// Recuperar el valor mediante obtener
console.log(datosFormulario.obtener("nombre")); // Pedro

// Modificar el valor con establecer
datosFormulario.establecer("nombre", "Luis");
console.log(datosFormulario.obtener("nombre")); // Luis

Inicialización desde un formulario HTML

Consideremos un formulario con campos para nombre de anuncio, tipo e imagen. Se puede inicializar FormData pasando el elemento del formulario al constructor.

<form id="formularioPublicidad">
    <p>Nombre del anuncio: <input type="text" name="nombreAnuncio" value="promo1"></p>
    <p>Tipo: <select name="tipoAnuncio">
        <option value="A1">Banner principal</option>
        <option value="A2">Banner secundario</option>
    </select></p>
    <p><input type="button" id="enviarBtn" value="Enviar"></p>
</form>

// Obtener el botón y asignar un evento de clic
const boton = document.getElementById("enviarBtn");
boton.addEventListener("click", function() {
    // Capturar el formulario por su ID
    const formulario = document.getElementById("formularioPublicidad");
    // Inicializar FormData con el formulario
    const datos = new FormData(formulario);
    
    // Recuperar valores específicos
    console.log(datos.obtener("nombreAnuncio")); // promo1
    console.log(datos.obtener("tipoAnuncio")); // A1
});

Métodos de operación

Obtener datos con obtener y obtenerTodos

El método obtener(clave) devuelve el primer valor asociado a una clave, minetras que obtenerTodos(clave) retorna un arreglo con todos los valores si existen múltiples.

const info = new FormData();
info.agregar("edad", "30");
info.agregar("edad", "25");

// Primer valor de la clave "edad"
console.log(info.obtener("edad")); // 30

// Todos los valores de la clave "edad"
console.log(info.obtenerTodos("edad")); // ["30", "25"]

Agregar datos con agregar

El método agregar(clave, valor) añade un par clave-valor al final de la colección. Si la clave ya existe, se agrega un nuevo valer sin sobrescribir los anteriores.

const registro = new FormData();
registro.agregar("ciudad", "Madrid");
registro.agregar("ciudad", "Barcelona");
registro.agregar("ciudad", "Valencia");

console.log(registro.obtener("ciudad")); // Madrid
console.log(registro.obtenerTodos("ciudad")); // ["Madrid", "Barcelona", "Valencia"]

Modificar datos con establecer

El método establecer(clave, valor) establece un valor para una clave. Si la clave no existe, se crea una nueva entrada; si ya existe, reemplaza todos los valores anteriores por el nuevo.

// Caso 1: Clave nueva
const config = new FormData();
config.establecer("tema", "oscuro");
console.log(config.obtener("tema")); // oscuro

// Caso 2: Clave existente
const ajustes = new FormData();
ajustes.agregar("idioma", "español");
ajustes.agregar("idioma", "inglés");
console.log(ajustes.obtenerTodos("idioma")); // ["español", "inglés"]

ajustes.establecer("idioma", "francés");
console.log(ajustes.obtener("idioma")); // francés
console.log(ajustes.obtenerTodos("idioma")); // ["francés"]

Verificar claves con contiene

El método contiene(clave) retorna un booleano indicando si la clave está presente en el FormData.

const datosUsuario = new FormData();
datosUsuario.agregar("correo", "ejemplo@dominio.com");

console.log(datosUsuario.contiene("correo")); // true
console.log(datosUsuario.contiene("telefono")); // false

Eliminar datos con eliminar

El método eliminar(clave) borra todos los valores asociados a la clave especificada.

const historial = new FormData();
historial.agregar("acción", "compra");
console.log(historial.obtener("acción")); // compra

historial.eliminar("acción");
console.log(historial.obtener("acción")); // null

Envío de datos mediante XMLHttpRequest

FormData es ideal para enviar datos de formularios, incluyendo archivos, a un servidor usando XMLHttpRequest.

<form id="formularioEnvio">
    <p>Nombre: <input type="text" name="nombre" value="Ana"></p>
    <p>Archivo: <input type="file" name="documento"></p>
    <p><input type="button" id="enviarDatos" value="Enviar"></p>
</form>

const botonEnvio = document.getElementById("enviarDatos");
botonEnvio.addEventListener("click", function() {
    // Capturar el formulario y crear FormData
    const form = document.getElementById("formularioEnvio");
    const datosEnvio = new FormData(form);
    
    // Configurar la solicitud XMLHttpRequest
    const solicitud = new XMLHttpRequest();
    solicitud.open("POST", "https://ejemplo.com/api/datos");
    solicitud.send(datosEnvio);
    
    // Manejar la respuesta
    solicitud.onload = function() {
        if (solicitud.status === 200) {
            console.log("Datos enviados exitosamente");
        }
    };
});

Etiquetas: FormData JavaScript XMLHttpRequest ManejoFormularios APIWeb

Publicado el 5-31 03:34