2017-09-10 3 views
1
funktioniert

Ich habe Form:Formdata hinzufügen Datei nicht

<form enctype="multipart/form-data" action="" method="post" id="sendInvoiceForm"> 
    <input type="text" value="Some text"> 
    <input name="file[]" type="file" multiple/> 
    <input type="button" id="upload" value="Upload File" /> 
</form> 

Meine js:

$('#upload').click(function(e) { 
      e.preventDefault(); 
      var formData = new FormData(); 
      formData.append('files',$("#sendInvoiceForm")[0]); 
      $.ajax({ 
       url: 'upload.php', 
       type: 'POST', 
       xhr: function() { 
        var myXhr = $.ajaxSettings.xhr(); 
        return myXhr; 
       }, 
       success: function (data) { 
       }, 
       data: formData, 
       cache: false, 
       contentType: false, 
       processData: false 
      }); 
      return false; 
     }); 

Wenn ich versuche, meine 'Dateien' zu bekommen in php Ich bekomme nur [object HTMLFormElement] Wie kann ich meine Dateien auf PHP bekommen?

Aber wenn ich meine formData als erstellen: var formData = new FormData($("#sendInvoiceForm")[0]); kann ich meine Dateien in _FILES finden, aber ich brauche Namen für dieses Array.

Wie kann ich dieses Problem lösen? Danke

+0

-Name ist schon da, die is'file 'Sie können in PHP mit' $ _FILES ['Datei'] 'zugreifen. was ist dann das Problem? –

+0

$ _FILES ist leer. Ich versuche 'print_r ($ _ FILES ['files']);' und bekomme den Fehler Undefined index: files –

+0

keep 'var formData = new FormData ($ (" # sendInvoiceForm ") [0]);' und versuche 'print_r ($ _FILES ['file']); 'in php –

Antwort

1

Das Problem liegt daran, dass Sie das form DOM-Element an die FormData anhängen, nicht die Dateidaten. Stattdessen sollten Sie die files Array dieses Objekts zugreifen:

formData.append('files', $('#sendInvoiceForm input[type="file"]')[0].files[0]); 

Da es können mehrere Dateien ausgewählt werden, müssen Sie eine Schleife durch sie:

$('#sendInvoiceForm input[type="file"]')[0].files.forEach(function(file) { 
    formData.append('files', file, file.name); 
}); 
+0

Danke, aber ich bekomme Fehler' TypeError: $ (...) [0] .files ist undefined' –

+0

Entschuldigungen - mein Fehler mit dem falschen Selektor . Ich habe die Antwort für dich aktualisiert –