⚡ ¿Cómo enviar datos desde JavaScript?

Comparativa visual entre FormData y JSON.stringify

OPCIÓN A: La Ruta Directa

1. Usando FormData

📦 Embalaje: Envía los datos como una planilla de formulario tradicional.
📥 Cómo lo recibe PHP: Lo guarda directamente en la superglobal $_POST.
// JavaScript
const datos = new FormData(formulario);

fetch('backend.php', {
    method: 'POST',
    body: datos // Sin headers manuales
});
✅ Ideal para: Formularios HTML directos, subida de archivos (imágenes/PDFs) y proyectos nativos en PHP.
OPCIÓN B: La Ruta Estándar

2. Usando JSON.stringify

📦 Embalaje: Convierte el objeto en una cadena de texto en formato JSON.
📥 Cómo lo recibe PHP: No entra en $_POST. PHP debe leer la entrada cruda con php://input.
// JavaScript
const datos = Object.fromEntries(new FormData(form));

fetch('backend.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(datos)
});
✅ Ideal para: APIs RESTful, frameworks modernos (React, Vue, Node.js) y automatizaciones.
n8n

Caso Especial: Webhooks en n8n

Cuando envías datos hacia un flujo de automatización en n8n (Webhook Node), el sistema espera recibir la estructura parseada como un objeto JSON nativo.


⚠️ ¿Por qué NO usar FormData en n8n?
Si envías un FormData a n8n, el webhook recibirá un flujo de datos codificado como multipart/form-data. Esto complica la lectura de los nodos posteriores, obligándote a usar nodos de conversión binaria.
💡 La Solución: Convierte siempre el formulario con Object.fromEntries() y envíalo empaquetado con JSON.stringify() definiendo el encabezado 'Content-Type': 'application/json'.

📌 ¿Cuál usar según cada escenario?

Escenario / Contexto Forma Recomendada Razón Principal
Formulario HTML tradicional enviando a PHP local FormData PHP llena $_POST automáticamente de forma nativa.
Subir imágenes, fotos o documentos (archivos) FormData Soporta el envío binario multi-parte requerido por el navegador.
Enviar datos a Webhooks de n8n o Make JSON.stringify() n8n procesa objetos JSON en sus nodos de forma automática.
APIs construidas en Node.js, Python (FastAPI/Flask) o Laravel JSON.stringify() Es el estándar de intercambio de datos en arquitectura REST.