Comment voir les fichiers téléchargés dans un formulaire avec ajax?

J'essaie de télécharger un fichier envoyé sous une forme. Je l'essaie avec php, mais entre html et php, j'utilise JS et Jquery et ajax (car je ne veux pas que la page se recharge). Et j'ai des problèmes avec $ _FILES.

Ici, je suis en utilisant un formulaire (qui contient une entrée de fichier) avec une action javascript (action = "javascript: SendPresupMail ();").

Dans cette fonction JS, j'utilise un peu Jquery et ajax, à l'intérieur, il y a un appel à une fonction php.

Le problème est que, à l'intérieur de cette fonction php, $ _FILES est vide, et je dois télécharger l'envoi du fichier dans le formulaire.

Voici le code:

Formulaire HTML, appel à JS:

<form action="javascript: sendPresupMail();" method="post" id="formId" enctype="multipart/form-data"> <input type="text" id="mail" name="mail" /> <input type="file" id="file_selected" name="file_selected" /> <input type="submit" value="Submit" /> 

JS, et appeler à PHP avec AJAX et JQUERY:

 function sendPresupMail() { $.ajax({ url: 'remote.php', type: 'post', data: { 'w': 'sendPresupMail', 'mail': document.getElementById('mail').value }, success: function(data) { if(data != "ok" && data != ""){alert(data);} if(data == "ok"){alert("mail send.");} } }); 

}

Enfin, le code PHP:

 private function sendPresupMail(){ $filename = ($_FILES['file_selected']['name']); ... ... } 

Le code n'est pas pertinent, le problème est que $ filename ne reçoit rien car $ _FILES est vide (je l'ai vérifié avec un var_dump, et il est vide). Je ne peux donc pas télécharger le fichier, que dois-je faire?

SOLUTIONS

Voici la solution: en fait, c'était beaucoup plus simple que ce que je pensais. Tout d'abord, je crée un iframe, alors maintenant toute la forme, javascript, ajax, etc. se déroule à l'intérieur de l'iframe. Il semble donc que la page ne soit pas rafraîchissante, car l'iframe le fait. Merci à tous pour vos réponses de toute façon!

Vous ne pouvez pas le faire avec un Ajax / jQuery pur, mais vous pouvez le faire en combinaison avec l'objet FormData JavaScript qui est pris en charge dans toutes les dernières versions des principaux navigateurs.

Un exemple très simple de jQuery peut être trouvé ici: https://coderwall.com/p/p-n7eq

Un JavaScript plus détaillé, mais pur, peut être trouvé ici: https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects?redirectlocale=en-US&redirectslug=Web%2FAPI%2FFormData%2FUsing_FormData_Objects

La variable $_POST sur la page que vous publiez est remplie à partir des data vous soumettez dans l'appel $.ajax . Ces données n'ont pas d'entrées de fichier, et je ne suis pas sûre qu'elle puisse. Jetez un oeil autour de quelques plugins pratiques.

Ceci recommande l'utilisation du jQuery Form Plugin: jQuery AJAX post with fileupload

J'ai personnellement utilisé Uploadify précédemment: http://www.uploadify.com/

Ou manuellement, faites-le: http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/

Vérifiez si $ _POST est également vide. $ _POST et $ _FILES ont tendance à être vides lorsque le fichier téléchargé dépasse upload_max_filesize ou post_max_size