0Pricing
HTML Academy · Aula

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

  1. A API FormData
  2. A API de validação de restrições
  3. reportValidity e setCustomValidity
  4. Eventos de redefinição de formulário e gerenciamento de estado
← Voltar para HTML Academy