Signatur
Beschreibung
Die Methode getAll() liefert alle Einträge, die in einem FormData-Objekt unter einem bestimmten Schlüssel liegen. Das Ergebnis ist ein Array in Einfügereihenfolge. get() gibt dagegen nur den ersten passenden Wert zurück.
Gebraucht wird sie vor allem bei Formularfeldern, die mehrere Werte unter einem Namen senden können: Gruppen von Checkboxen mit gleichem name, <select multiple>, <input type="file" multiple> oder Einträge, die man per append() mehrfach hinzugefügt hat.
Jeder Wert im Array ist entweder ein string oder ein File. Gibt es keinen Eintrag mit dem Schlüssel, kommt ein leeres Array zurück und nicht null. Man kann das Ergebnis also ohne Prüfung direkt mit map(), filter() oder length weiterverarbeiten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Der Schlüssel (Feldname), dessen Werte abgefragt werden. Groß- und Kleinschreibung werden unterschieden. Andere Typen werden in einen String umgewandelt. |
Rückgabewert
[]). Änderungen am Array wirken sich nicht auf das FormData-Objekt aus.Beispiele
Mehrfach angehängte Werte auslesen
const fd = new FormData();
fd.append('tag', 'javascript');
fd.append('tag', 'web-api');
fd.append('tag', 'formdata');
console.log(fd.get('tag')); // nur der erste Wert
console.log(fd.getAll('tag')); // alle Werte
console.log(fd.getAll('fehlt')); // unbekannter Schlüssel
Checkbox-Gruppe beim Absenden auswerten
// HTML:
// <form id="prefs">
// <label><input type="checkbox" name="interessen" value="sport" checked> Sport</label>
// <label><input type="checkbox" name="interessen" value="musik"> Musik</label>
// <label><input type="checkbox" name="interessen" value="reisen" checked> Reisen</label>
// <button>Speichern</button>
// </form>
const form = document.querySelector('#prefs');
form.addEventListener('submit', (event) => {
event.preventDefault();
const data = new FormData(form);
const interessen = data.getAll('interessen');
if (interessen.length === 0) {
console.warn('Bitte mindestens ein Interesse wählen.');
return;
}
console.log('Gewählt:', interessen);
});
Mehrere Dateien prüfen und hochladen
// HTML: <input type="file" name="bilder" multiple id="upload">
const input = document.querySelector('#upload');
input.addEventListener('change', async () => {
const fd = new FormData();
for (const file of input.files) fd.append('bilder', file);
const dateien = fd.getAll('bilder');
const zuGross = dateien.filter((f) => f.size > 5 * 1024 * 1024);
if (zuGross.length > 0) {
console.error('Zu groß:', zuGross.map((f) => f.name));
return;
}
const res = await fetch('/api/upload', { method: 'POST', body: fd });
console.log(`${dateien.length} Datei(en) hochgeladen, Status ${res.status}`);
});
FormData in ein Objekt mit Arrays umwandeln
const fd = new FormData();
fd.append('name', 'Anna');
fd.append('sprache', 'de');
fd.append('sprache', 'en');
// Object.fromEntries würde Mehrfachwerte überschreiben – daher getAll()
const obj = {};
for (const key of new Set(fd.keys())) {
const werte = fd.getAll(key);
obj[key] = werte.length > 1 ? werte : werte[0];
}
console.log(obj);
// Wichtig · Fallstricke
- Leeres Array statt
null: Im Gegensatz zuget()gibtgetAll()bei fehlendem Schlüssel[]zurück. Eine Prüfung wieif (fd.getAll('x'))ist deshalb immer wahr. Stattdessen.lengthabfragen. - Nicht angehakte Checkboxen und deaktivierte Felder (
disabled) landen gar nicht imFormData-Objekt und tauchen auch hier nicht auf. - Datei-Eingaben ohne Auswahl: Ein leeres
<input type="file">liefert in vielen Browsern einFilemit leerem Namen undsize === 0. Das Ergebnis also nachf.size > 0filtern. - Nur Kopie: Das zurückgegebene Array ist eine Momentaufnahme. Wer Werte ändern will, nimmt
set(),append()oderdelete(). Object.fromEntries(formData)behält pro Schlüssel nur den letzten Wert. Für Mehrfachwerte braucht mangetAll().- Kompatibilität: Wird von allen aktuellen Browsern unterstützt, auch in Web Workern. In Node.js ist
FormDataab Version 18 global verfügbar. Der Internet Explorer unterstützt die Methode nicht.