2014-01-29 12 views
12

Here ist ein Weg, um append Datei zu FormData:Wie Wert von Formdata entfernen

var data = new FormData(); 
    jQuery.each($('#file')[0].files, function(i, file) { 
      data.append('file-'+i, file); 
    }); 

ist es möglich, wie weiter unten zu tun?

 data[i].remove();??? 
or data[i] = file;?? 

wie iIcan entfernen oder einen Wert von data

+0

Überprüfen Sie den Wert von 'Daten' in Firebug oder der Chrome-Konsole, wenn Sie können. – bozdoz

+0

Es scheint mir, dass keine Entfernungsmethode verfügbar ist. Die Idee mit FormData ist, dass es einen einfachen AJAX-Wrapper für ein Formularelement erstellen und Ihnen ermöglichen soll, zusätzliche Daten anzuhängen, bevor Sie die Anfrage senden. Wenn Sie Elemente entfernen möchten, empfehle ich, mit einer Bibliothek wie jQuery zu arbeiten oder einen eigenen AJAX-Wrapper zu erstellen, der ein Standardobjekt erwartet, sodass Sie Elemente nach Belieben hinzufügen und entfernen können. https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects –

Antwort

22

ändern Sie nichts anderes als anhängen Elemente zu einem Formdata-Objekt tun kann. Siehe the Spec. Es wäre besser, wenn Sie ein Dictionary/Objekt verwenden, um alle Werte zu speichern, die Sie hinzufügen/ändern möchten, bevor Sie das Objekt konstruieren.

var data = {}; 
jQuery.each($('#file')[0].files, function(i, file) { 
    data['file-'+i] = file; 
}); 

//modify the object however you want to here 

var formData = new FormData(); 
for (var key in data) { 
    formData.append(key, data[key]); 
} 
+0

gute Antwort, aber würde nicht Daten ['Datei []'] = Datei besser sein? – Marcel

+0

Die Spezifikation ist tatsächlich da (auf dem gleichen Link), aber von niemandem implementiert. Vielleicht lohnt es sich in Zukunft zu überprüfen. –

+0

@Marcel Das wäre nur erforderlich, wenn der Server, auf den du schreibst, es benötigt, in deinem Fall PHP. –

2

Ich weiß, dieser Thread ist alt, aber ich habe gerade dies: https://developer.mozilla.org/en-US/docs/Web/API/FormData/delete

Ich bin sur es helfen könnte. Sie können formData.delete(name) verwenden, um den Eintrag von formData mit dem Schlüssel "name" zu löschen.

+0

Dies funktioniert nicht mit 2 mobilen Browsern, die ich unter iOS 10 und Android 5.1 getestet habe. –

+0

Hier finden Sie die Browserkompatibilität: https://developer.mozilla.org/de/docs/Web/API/FormData/delete#Browser_compatibility – wittich