2012-07-31 5 views
0

J'essaye d'incorporer du code de comment here de l'utilisateur de Stack DannYo, cependant ma version de son code ne semble pas courir. L'erreur et les fonctions "beforesend" reviennent à chaque fois.Téléchargement de fichier HTML avec jQuery/Ajax ne fonctionne pas

HTML

<form action="" method="post" enctype="multipart/form-data"> 
    <input type="file" id="file"> 
    <input type="email" id="sender" name="sender" required> 
    <input type="email" id="receiver" name="receiver" required> 
    <input type="text" id="message" name="message"> 
    <button id="send" class="button">Send it</button> 
</form> 

JavaScript

$("form").on("submit", function() { 

    var formData = new FormData($('form')[0]); 

    $.ajax({ 
     url: 'upload.php', //server script to process data 
     type: 'POST', 
     xhr: function() { // custom xhr 

      myXhr = $.ajaxSettings.xhr(); 

      if (myXhr.upload) { // check if upload property exists 
       myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload 
      } 

      return myXhr; 

     }, 

     //Ajax events 
     beforeSend: function() { console.log("before send function works"); }, 
     success: function(e) { 
      console.log(e); 
     }, 
     error: function() { console.log("error function works"); }, 

     // Form data 
     data: formData, 

     //Options to tell JQuery not to process data or worry about content-type 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 

    return false; 

}); 

PHP

Pour des fins de test, le fichier upload.php n'a que <?php echo "success"; ?>

En utilisant l'outil de développement de réseau de Chrome, je ne vois aucun transfert de fichier. Quelqu'un voit un trou flagrant dans mon code? Merci

+0

'L'erreur et les fonctions" beforesend "reviennent à chaque fois. Quelle erreur avez-vous reçue? –

+0

Le journal de la console imprime juste ce que j'ai spécifié dans la fonction d'erreur: "la fonction d'erreur fonctionne" – izolate

Répondre

1

Si votre fonction d'erreur est appelée, alors la réponse est probablement dans son résultat. S'il vous plaît vérifier quelle erreur est renvoyée en affichant error function works ne vous est pas bon.

error: function(xhr, status, error) { 
    alert(xhr.responseText); 
    // OR 
    alert(status + " : " + error); 
} 

Modifier: A noter aussi, je crois que vous devez gérer l'enregistrement de fichier que vous essayez de télécharger. T his tutorial for uploading files in php peut être utile.

+0

Je suis d'accord que ma fonction d'erreur est stupide. En utilisant celui que vous m'avez donné, il rafraîchit simplement la page mais pas avant d'afficher ceci dans la console: 'Uncaught TypeError: Impossible de prêter la propriété 'Message' de undefined' – izolate

+1

@muppethead C'est intéressant. J'ai mis à jour ma réponse avec quelque chose d'autre que j'ai déjà fait. –

+0

Ah, ha! Oui, votre modification s'est avérée utile. L'erreur a indiqué 'progressHandlingFunction' n'a pas été défini. Donc, j'ai ajouté la fonction de gestion de progression et maintenant le formulaire ne retourne pas la fonction d'erreur. Mais à la place, je reçois une erreur 500 Server interne. Est-ce parce que je travaille localement avec MAMP? – izolate

Questions connexes