wie man Dateien mit jquery-Serialisierung hochlädt

Lesezeit: 5 Minuten

wie man Dateien mit jquery Serialisierung hochladt
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

wie man Dateien mit jquery Serialisierung hochladt
Shaiful Islam

Benutzen FormData Objekt. Es funktioniert für jede Art von Formular

$(document).on("submit", "form", function(event)
{
    event.preventDefault();
    $.ajax({
        url: $(this).attr("action"),
        type: $(this).attr("method"),
        dataType: "JSON",
        data: new FormData(this),
        processData: false,
        contentType: false,
        success: function (data, status)
        {

        },
        error: function (xhr, desc, err)
        {
            

        }
    });        

});

  • 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

wie man Dateien mit jquery Serialisierung hochladt
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.

1644318187 775 wie man Dateien mit jquery Serialisierung hochladt
Renish Patel

HTML

<form name="my_form" id="my_form" accept-charset="multipart/form-data" onsubmit="return false">
    <input id="name" name="name" placeholder="Enter Name" type="text" value="">
    <textarea id="detail" name="detail" placeholder="Enter Detail"></textarea>
    <select name="gender" id="gender">
        <option value="male" selected="selected">Male</option>
        <option value="female">Female</option>
    </select>
    <input type="file" id="my_images" name="my_images" multiple="" accept="image/x-png,image/gif,image/jpeg"/>
</form>

JavaScript

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
    }
});

PHP

<?php
    echo '<pre>';
    print_r($_POST);
    print_r($_FILES);
    echo '</pre>';
    die();
?>

1644318187 255 wie man Dateien mit jquery Serialisierung hochladt
Rossco

Sie können Dateien über AJAX hochladen, indem Sie die FormData-Methode verwenden. Obwohl IE7, 8 und 9 die FormData-Funktionalität nicht unterstützen.

$.ajax({
    url: "ajax.php", 
    type: "POST",             
    data: new FormData('form'),
    contentType: false,       
    cache: false,             
    processData:false, 
    success: function(data) {
        $("#response").html(data);
    }
});

  • 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

1644318188 111 wie man Dateien mit jquery Serialisierung hochladt
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

1644318188 395 wie man Dateien mit jquery Serialisierung hochladt
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+

Formulardaten – Mozilla.org

.

821810cookie-checkwie man Dateien mit jquery-Serialisierung hochlädt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy