2016-03-05 4 views
0

Je possède ce petit script AJAX pour gérer un téléchargement de fichier:

$('body').on('change', '#uploadFile', function() { 
    // Post-Data 
    var data = new FormData(); 
    data.append('file', this.files[0]); 
    //data.append('foo', 1); 

    // Ajax-Call 
    $.ajax({ 
     url: "uploadUserpic.php", 
     data: data, 
     type: "POST", 
     processData: false, 
     contentType: false, 
     success: function(evt) { 
      $("#message").html(data); 
     } 
    }); 
}); 

Le fichier télécharger lui-même fonctionne, mais le message sur le succès (en #message) non représenté. Pourquoi est-ce? Voici le petit script PHP pour le téléchargement:

$uploaddir = '../data/'; 
$uploadfile = $uploaddir . basename($_FILES['file']['name']); 

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { 
    echo "File Upload OK.\n"; 
} else { 
    echo "Something went wrong\n"; 
} 
+1

Si le gestionnaire 'success' n'est pas touché, cela signifie que le code côté serveur ne renvoie pas' 200 OK 'réponse. Vérifiez l'onglet réseau de la console pour voir exactement quelle est la réponse de la requête et, espérons-le, déterminez la cause de l'erreur. –

+0

Rien .... dans le réseau. – DragonStyle

Répondre

0

Donc, la solution est d'envelopper la fonction de succès dans une autre fonction. Ne me demande pas pourquoi. Ne demandez pas pourquoi un homme doit passer des heures à lire ces informations importantes:

$('body').on('change', '#uploadFile', function() { 

// Post-Data 
var data = new FormData(); 
data.append('file', this.files[0]); 
//data.append('foo', 1); 

// Ajax-Call 
$.ajax({ 
    url: "uploadUserpic.php", 
    data: data, 
    type: "POST", 
    processData: false, 
    contentType: false, 
    success : handleData 
}); 
}); 

function handleData(data) { 
    $("#message").html(data); 
//do some stuff 
} 
+0

Je ne suis pas sûr de savoir comment cela est la réponse, car il est logiquement pas différent de ce que vous avez déjà eu. Je suppose que vous avez accidentellement résolu un problème ailleurs dans le code qui causait le problème, mais au moins vous l'avez corrigé. –

+0

Hm ... Je n'emballe que la fonction de succès comme je le dis et ça marche. – DragonStyle

+0

Une chose que je remarque dans le code de votre question est que la fonction 'success' prend un paramètre' evt', mais essaie de définir le 'html()' avec la variable 'data'. Cela pourrait être le problème original, bien que si c'était vraiment le cas vous auriez eu au moins une erreur dans la console. –