FormData
è il migliore amico dell'utente XHR e sta ricevendo un upgrade in Chrome 50.
Stiamo aggiungendo metodi che ti consentono di ispezionare gli oggetti FormData
o di modificarli in un secondo momento.
Ora puoi utilizzare get()
, delete()
e gli aiuti per l'iterazione come entries
, keys
e altri ancora. (Dai un'occhiata all'elenco completo.)
Se non utilizzi già FormData, si tratta di un'API semplice e ben supportata che ti consente di creare ed eseguire in modo programmatico un modulo virtuale e di inviarlo a una località lontana utilizzando window.fetch()
o XMLHttpRequest.send(formData)
.
Continua a leggere per alcuni esempi.
Analizza i moduli reali come un professionista
FormData
può essere creato da un modulo HTML reale, acquisendo uno snapshot di tutti i relativi valori correnti.
Tuttavia, l'oggetto era completamente opaco. Non potevi fare altro che inoltrarlo, invariato, a un server.
Ora puoi scattarla, modificarla, osservarla, ridurla, cambiarla e infine caricarla:
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});
}
Puoi anche inviare FormData
tramite la versione precedente di XMLHttpRequest
:
var x = new XMLHttpRequest();
x.open('POST', url);
x.send(formData);
Non eliminare FormData
Se stai creando il tuo FormData
da zero, potresti aver trovato frustrante non poterlo riutilizzare, dato che hai dedicato molto tempo a questi campi.
Poiché entrambi i metodi window.fetch()
e XMLHttpRequest.send()
acquisiscono uno snapshot del FormData
, ora puoi riutilizzare e modificare in sicurezza il tuo lavoro.
Dai un'occhiata a questo esempio:
// 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});