2016-10-15 9 views
10

Ich schrieb dies, um ein Bild auf meinen lokalen Apache-Webserver mit input Element in HTML zu laden. Die file wird als nicht leer protokolliert, aber warum ist die form_data komplett leer?FormData append funktioniert nicht

$('#upload-image').change(function(e){ 
    var file = e.target.files[0]; 
    var imageType = /image.*/; 
    if (!file.type.match(imageType)) 
     return; 
    console.log(file); 
    var form_data = new FormData(); 
    form_data.append('file', file); 
    console.log(form_data); 
    $.ajax({ 
     url: 'http://localhost/upload.php', 
     cache: false, 
     contentType: false, 
     processData: false, 
     data: form_data, 
     type: 'POST', 
     success: function(response){ 
      console.log(response); 
     }, 
     error: function(error){ 
      console.log(error); 
     } 
    }); 

}); 

Das ist mein upload.php auf lokalen Webserver

<?php 
    header('Access-Control-Allow-Origin: *'); 
    if (0 < $_FILES['file']['error']) { 
     echo 'Error: ' . $_FILES['file']['error'] . '<br>'; 
    } 
    else { 
     move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']); 
     $target_path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_FILES['file']['name']; 
     echo $target_path; 
    } 
?> 

Die console.log(response) Protokolle alle Codezeilen PHP-Datei anstelle des zurückgegebenen Ergebnisses von echo

+0

hast du versucht, in der url nur 'upload.php' zu verwenden? Es ist nicht üblich, einen absoluten Pfad zu sehen, und den localhost nicht zu erwähnen. Denken Sie daran, dass der AJAX-Aufruf davon abhängt, wo die Javascript-Datei sitzt. Wenn Sie zum Beispiel einen Ordner in Ihrem Root namens "phpFiles/upload.php" haben sollte in die URL eingefügt werden. – Leo

+0

console.log (form_data); Was bringt dich hierher? –

+0

Was erwarten Sie zu sehen? Sie können ein formData-Objekt nicht wirklich protokollieren, daher sollte es leer sein, selbst wenn die Datei vorhanden ist. Haben Sie den Server überprüft, ob die Datei empfangen wurde oder nicht? – adeneo

Antwort

15

Wenn mit nur einem Formdata-Objekt Protokollierung console.log(formData) es wird immer leer zurückgegeben, da Sie formData nicht protokollieren können.

Wenn Sie es einfach einloggen müssen, bevor sie senden, können Sie entries() verwenden die Einträge in den Formulardaten zu erhalten Objekt

$('#upload-image').change(function(e) { 
    var file = e.target.files[0]; 
    var imageType = /image.*/; 

    if (!file.type.match(imageType)) return; 

    var form_data = new FormData(); 
    form_data.append('file', file); 

    for (var key of form_data.entries()) { 
     console.log(key[0] + ', ' + key[1]); 
    } 

    $.ajax({ 
     url: 'http://localhost/upload.php', 
     cache: false, 
     contentType: false, 
     processData: false, 
     data: form_data, 
     type: 'POST', 
     success: function(response) { 
      console.log(response); 
     }, 
     error: function(error) { 
      console.log(error); 
     } 
    }); 

}); 
+0

Wann wird es auf Webserver gespeichert? Ich kann den Speicherort von 'uploads' nicht finden – necroface

+0

Ich denke, es ist'/var/www/html', aber ich kann 'uploads' dort nicht sehen – necroface

-1

ich bemerkt habe, dass die contentType: false nur auf jQuery arbeiten 1.7.0 und darüber. Stellen Sie also sicher, dass Sie die richtige jQuery-Version verwenden.

Verwandte Themen