Ich verwende Ajax, um ein mehrteiliges Formular mit Array, Textfeldern und Dateien einzureichen.
Ich hänge jeden VAR so an die Hauptdaten an
var attachments = document.getElementById('files');
var data= new FormData();
for (i=0; i< attachments.files.length; i++){
data.append('file', attachments.files[i]);
console.log(attachments.files[i]);
data.append ('headline', headline);
data.append ('article', article);
data.append ('arr', arr);
data.append ('tag', tag);
dann benutze ich die Ajax-Funktion, um es an eine PHP-Datei zu senden, um es in der SQL-Datenbank zu speichern.
$.ajax({
type: "post",
url: 'php/submittionform.php',
cache: false,
processData: false,
contentType: false,
data: data,
success: function(request) {$('#box').html(request); }
})
Auf der PHP-Seite wird die arr
Variable, bei der es sich um ein Array handelt, als Zeichenfolge angezeigt.
Wenn ich es nicht mit Ajax als Formulardaten sende, sondern die einfache $.POST
Option verwende, bekomme ich es als Array auf der PHP-Seite, aber dann kann ich die Dateien auch nicht senden.
irgendwelche Lösungen?
javascript
ajax
arrays
form-data
shultz
quelle
quelle
Sie können ein Array auch folgendermaßen senden
FormData
:Sie können also
arr[]
genauso schreiben wie mit einem einfachen HTML-Formular. Im Falle von PHP sollte es funktionieren.Dieser Artikel ist möglicherweise hilfreich: Wie übergebe ich ein Array innerhalb einer Abfragezeichenfolge?
quelle
arr[]
informData.append('arr[]', arr[i]);
? warum ist das nichtarr
richtig Ich habe beides versucht, aber nurarr[]
funktioniert.arr
Sie diesen Wert bei jeder Schleifeniteration neu definieren, und am Ende der endgültige Wert gleich dem letzten Array-Element, aber nicht dem gesamten Arrayarr[]
, warum wird nichtarr[]
neu definiert?arr[]
ist auch eine Zeichenfolge. Und während der Prüfung beide wederarr
nocharr[]
in meinem Fall neu definiert. Ich habe mehrere Arrays in FormData mit demselben Schlüssel, aber unterschiedlichem Wert. Also habe icharr
mit Wert1
und ein andererarr
mit Wert2
.arr
auch für Arrays gearbeitet wurde. In diesem Thema gibt es eine detailliertere Antwort auf diese Fragefor (var i = 0; i < myArr; i++) { var myItemInArr = myArr[i]; for (var prop in myItemInArr) { fileData.append(`myArr[${i}][${prop}]`, myItemInArr[prop]); } }
Dies ist eine alte Frage, aber ich bin kürzlich auf dieses Problem gestoßen, als ich Objekte zusammen mit Dateien gepostet habe. Ich musste in der Lage sein, ein Objekt mit untergeordneten Eigenschaften zu veröffentlichen, die auch Objekte und Arrays waren.
Die folgende Funktion geht durch ein Objekt und erstellt das richtige formData-Objekt.
Dies konvertiert den folgenden json -
in die folgenden FormData
quelle
(value !== null) && formData.append(key, value)
statt nurformData.append(key, value)
sonst sein, es scheitert an NullwertenTyposkript-Version:
Verwenden von:
quelle
Fügen Sie FormData alle Typeneingaben hinzu
quelle
Wenn Sie verschachtelte Objekte und Arrays haben, können Sie das FormData-Objekt am besten mithilfe der Rekursion füllen.
quelle
Nächste Version gültig für Modell mit Arays einfacher Werte:
quelle
Basierend auf @YackY Antwort kürzere Rekursionsversion:
Anwendungsbeispiel:
Gesendete Daten:
quelle