A API FormData
Colete dados de formulários programaticamente com a interface FormData.
A API FormData é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.
O que é FormData
FormData é um objeto nativo que representa campos de formulário e seus valores, adequado para envio direto por meio de fetch ou XMLHttpRequest. Ele trata envios de arquivos, codificação multipart e pares arbitrários de chave e valor sem serialização manual.
Construindo a partir de um formulário
Passe um elemento <form> ao construtor: const data = new FormData(formElement). O resultado contém cada controle de formulário válido (campos de entrada nomeados, listas de seleção, áreas de texto, caixas de seleção marcadas e arquivos). Controles desativados e desmarcados são excluídos automaticamente.
document.forms.checkout.addEventListener("submit", async (e) => {
e.preventDefault();
const data = new FormData(e.target);
await fetch("/api/checkout", { method: "POST", body: data });
});Enviando com fetch
Passar FormData como corpo de fetch define automaticamente o Content-Type da solicitação como multipart/form-data (com o limite correto). Não defina Content-Type manualmente — fetch precisa gerar o limite por conta própria.
Operações de append, definição e exclusão
data.append(key, value) adiciona uma chave (permitindo duplicatas). data.set(key, value) substitui qualquer valor existente da chave. data.delete(key) remove todos os valores de uma chave. data.has(key) verifica a presença.
const data = new FormData();
data.append("tag", "html");
data.append("tag", "css");
console.log(data.getAll("tag")); // ["html", "css"]Envio de arquivos
FormData trata arquivos de forma transparente: data.append("avatar", fileInput.files[0]). O servidor recebe um envio multipart com o nome e o tipo MIME do arquivo. Esta é a forma padrão de enviar arquivos com fetch em código moderno.
Iteração
FormData é iterável: for (const [key, value] of data) { ... }. Use data.entries(), data.keys(), data.values() para iterações específicas. Isso é útil para fazer registros, validar ou construir uma cópia JSON do formulário.
Convertendo para JSON
Para enviar como JSON em vez de multipart: Object.fromEntries(data) produz um objeto simples — mas perde chaves duplicadas. Para tratar duplicatas corretamente, percorra as entradas e agrupe-as manualmente. Para interfaces de programação puramente JSON, é mais simples construir o objeto diretamente sem passar por FormData.
Preenchimento programático
Construa um FormData vazio e adicione valores manualmente: const data = new FormData(); data.append("title", title); data.append("file", file);. Isso é útil ao enviar dados que não vieram de um formulário (arquivos arrastados, respostas de interfaces de programação e cargas úteis geradas).
Detecção do botão de envio
Se houver vários botões de envio, passe o botão que acionou o envio como segundo argumento de FormData: new FormData(form, e.submitter). O nome e o valor desse botão são incluídos nos dados — algo importante para formulários com várias ações.
Parente de URLSearchParams
Para a codificação application/x-www-form-urlencoded (a codificação padrão de formulários sem arquivos), construa um URLSearchParams a partir de FormData: new URLSearchParams(data). É mais econômico do que multipart para formulários somente de texto.
Armadilha comum
Definir explicitamente o cabeçalho Content-Type da API fetch como "multipart/form-data" interrompe o envio — o navegador deixa de conseguir adicionar o limite necessário. Omita Content-Type ao enviar FormData e deixe fetch cuidar disso.
Verificação de conhecimentos
Por que você deve NOT definir Content-Type manualmente ao enviar FormData com fetch?
Resumo
FormData representa o conteúdo de formulários e é enviado corretamente com fetch — incluindo envios de arquivos por meio de multipart/form-data. Construa-o a partir de um elemento de formulário, adicione, defina ou exclua entradas e percorra-as conforme necessário. Não defina Content-Type ao enviar — fetch gera o limite automaticamente. Use URLSearchParams para formulários codificados na URL somente com texto.
Perguntas Frequentes
A aula “A API FormData” é grátis?
Sim — o texto completo de “A API FormData” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.
O que vou aprender em “A API FormData”?
Colete dados de formulários programaticamente com a interface FormData. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar HTML Academy?
Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “A API FormData”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de HTML Academy?
Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- A API FormData
- A API de validação de restrições
- reportValidity e setCustomValidity
- Eventos de redefinição de formulário e gerenciamento de estado