wie man Dateien mit jquery-Serialisierung hochlädt
Lesezeit: 5 Minuten
kamikaze_pilot
Ich habe also ein Formular und sende das Formular über Ajax mit der Jquery-Serialisierungsfunktion
serialized = $(Forms).serialize();
$.ajax({
type : "POST",
cache : false,
url : "blah",
data : serialized,
success: function(data) {
}
aber was ist, wenn das Formular eine hat <input type="file"> Feld …. wie übergebe ich die Datei mit dieser Ajax-Serialisierungsmethode an das Formular … das Drucken von $_FILES gibt nichts aus
Shaiful Islam
Benutzen FormData Objekt. Es funktioniert für jede Art von Formular
Wichtiger Hinweis dazu: processData: false, contentType: false, wird benötigt, um ein zu vermeiden Illegal invocation Fehler, da ohne diese jQuery versucht, die Formulardaten beim Senden in einen String umzuwandeln, was in diesem Fall nicht erwünscht ist.
– Jeppe Mariager-Lam
15. Dezember 2020 um 18:34 Uhr
Darin Dimitrow
Eine Datei kann nicht mit AJAX hochgeladen werden, weil Sie nicht auf den Inhalt einer Datei zugreifen können, die auf dem Client-Computer gespeichert ist, und sie in der Anfrage nicht mit Javascript senden können. Eine der Techniken, um dies zu erreichen, ist die Verwendung versteckter Iframes. Es gibt eine nette jquery-Formular-Plugin wodurch Sie Ihre Formulare und es AJAXify können unterstützt Datei-Uploads sowie. Wenn Sie dieses Plugin verwenden, sieht Ihr Code einfach so aus:
$(function() {
$('#ifoftheform').ajaxForm(function(result) {
alert('the form was successfully processed');
});
});
Das Plugin kümmert sich automatisch um das Abonnieren der submit Ereignis des Formulars, Abbrechen der Standardübermittlung, Serialisieren der Werte, Verwenden der richtigen Methode und Behandeln von Datei-Upload-Feldern, …
Dies ist nicht mehr wahr. Mit einem und dem FormData()-Objekt kann man sehr einfach eine Datei mit AJAX speichern. Siehe die Antwort von Silver89 unten.
– Rook777
4. April 13 um 20:17 Uhr
@ Rook777, das gilt natürlich, wenn der von Ihnen verwendete Browser die HTML5-Datei-API unterstützt. Haben Sie dies im IE versucht, wie einfach es ist? Bis HTML5 ein Standard wird und von allen Browsern unterstützt wird, wird es Plugins geben, da Sie keine Dateien mit AJAX hochladen können.
– Darin Dimitrow
4. April 13 um 21:08 Uhr
Du hast Recht. Ich habe das Glück, in einer Entwicklungsumgebung zu sein, die IE nicht unterstützt, also habe ich vergessen, es in Betracht zu ziehen. Ja, ohne HTML5-Kompatibilität funktioniert diese Funktion nicht. Gemäß caniuse.com/xhr2nur IE 10+ unterstützt diese Funktion bisher.
– Rook777
8. April 13 um 14:56 Uhr
Das jQuery-Formular-Plugin ist großartig!
– Benutzer1570144
21. Oktober 14 um 2:42 Uhr
var form = $('#job-request-form')[0];
var formData = new FormData(form);
event.preventDefault();
$.ajax({
url: "/send_resume/", // the endpoint
type: "POST", // http method
processData: false,
contentType: false,
data: formData,
Bei mir hat es funktioniert! setze einfach processData und contentType auf False.
var data = new FormData();
//Form data
var form_data = $('#my_form').serializeArray();
$.each(form_data, function (key, input) {
data.append(input.name, input.value);
});
//File data
var file_data = $('input[name="my_images"]')[0].files;
for (var i = 0; i < file_data.length; i++) {
data.append("my_images[]", file_data[i]);
}
//Custom data
data.append('key', 'value');
$.ajax({
url: "URL",
method: "post",
processData: false,
contentType: false,
data: data,
success: function (data) {
//success
},
error: function (e) {
//error
}
});
was ist ‘form’ in new FormData(‘form’), ist es die id, es funktioniert bei mir nicht
– Mohamed Ali
28. November 15 um 17:09 Uhr
Ja, dies wäre normalerweise die Formular-ID
– Rossko
30. November 15 um 7:22 Uhr
Für mich funktioniert es nur mit document.forms.form anstelle von ‘Form’-String, der an den FormData-Konstruktor übergeben wird
– Mohamed Ali
30. November 15 um 12:23 Uhr
RameshN
$(document).on('click', '#submitBtn', function(e){
e.preventDefault();
e.stopImmediatePropagation();
var form = $("#myForm").closest("form");
var formData = new FormData(form[0]);
$.ajax({
type: "POST",
data: formData,
dataType: "json",
url: form.attr('action'),
processData: false,
contentType: false,
success: function(data) {
alert('Sucess! Form data posted with file type of input also!');
}
)};});
Durch die Nutzung new FormData() und Einstellung processData: false, contentType:false in Ajax-Call-Übermittlung des Formulars mit Dateieingabe funktionierte für mich
Mit dem obigen Code kann ich Formulardaten mit Dateifeld auch über Ajax senden
was ist ‘form’ in new FormData(‘form’), ist es die id, es funktioniert bei mir nicht
– Mohamed Ali
28. November 15 um 17:09 Uhr
Ja, dies wäre normalerweise die Formular-ID
– Rossko
30. November 15 um 7:22 Uhr
Für mich funktioniert es nur mit document.forms.form anstelle von ‘Form’-String, der an den FormData-Konstruktor übergeben wird
– Mohamed Ali
30. November 15 um 12:23 Uhr
Rohan Aschik
HTML5 stellt vor FormData Klasse, die zum Hochladen von Dateien mit Ajax verwendet werden kann.
Die FormData-Unterstützung beginnt ab den folgenden Desktop-Browser-Versionen. IE 10+, Firefox 4.0+, Chrome 7+, Safari 5+, Opera 12+