FormData
é o melhor amigo do usuário do XHR e vai receber um upgrade no Chrome 50.
Estamos adicionando métodos que permitem inspecionar seus objetos FormData
ou modificá-los após o fato.
Agora você pode usar get()
, delete()
e auxiliares de iteração, como entries
, keys
e muito mais. Confira a lista completa.
Se você ainda não usa o FormData, ele é uma API simples e com suporte que permite criar programaticamente um formulário virtual e enviá-lo a um local distante usando window.fetch()
ou XMLHttpRequest.send(formData)
.
Para conferir alguns exemplos, continue lendo.
Analise formulários reais como um profissional
FormData
pode ser criado a partir de um formulário HTML real, fazendo um instantâneo de todos os valores atuais.
No entanto, o objeto costumava ser totalmente opaco. Tudo o que você podia fazer era enviá-lo sem alterações a um servidor.
Agora, você pode pegar, modificar, bater, observar, reduzir, mudar e, por fim, fazer upload:
function sendRequest(theFormElement) {
var formData = new FormData(theFormElement);
formData.delete("secret_user_data"); // don't include this one!
if (formData.has("include_favorite_color")) {
formData.set("color", userPrefs.getColor());
}
// log all values like <input name="widget">
console.info("User selected widgets", formData.getAll("widget"));
window.fetch(url, {method: 'POST', body: formData});
}
Também é possível enviar FormData
pelo XMLHttpRequest
mais antigo:
var x = new XMLHttpRequest();
x.open('POST', url);
x.send(formData);
Não descarte os FormData
Se você estiver criando seu próprio FormData
do zero, talvez tenha achado frustrante não poder reutilizá-lo. Você passou muito tempo nesses campos.
Como os métodos window.fetch()
e XMLHttpRequest.send()
capturam um snapshot do FormData
, agora você pode reutilizar e modificar seu trabalho com segurança.
Confira este exemplo:
// append allows multiple values for the same key
var formData = new FormData();
formData.append("article", "id-123");
formData.append("article", "id-42");
// send like request
formData.set("action", "like");
window.fetch(url, {method: 'POST', body: formData});
// send reshare request
formData.set("action", "reshare"); // overrides previous "action"
window.fetch(url, {method: 'POST', body: formData});