Maison >interface Web >js tutoriel >Pourquoi AJAX ne fonctionne-t-il pas pour les téléchargements de fichiers et quelle est la meilleure alternative ?
Téléchargement de fichiers avec des requêtes AJAX : un guide complet
Problème : Tentative de lancement d'une « demande de téléchargement ajax » le clic sur le bouton ne donne pas les résultats souhaités. Une démonstration en JavaScript et PHP est fournie ci-dessous :
JavaScript :
var xhr = new XMLHttpRequest(); xhr.open("GET", "download.php"); xhr.send();
PHP (download.php) :
<? header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename= file.txt"); header("Content-Transfer-Encoding: binary"); readfile("file.txt"); ?>
Le code ci-dessus ne fonctionne pas comme prévu. Pouvez-vous nous donner un aperçu des étapes nécessaires pour résoudre ce problème ?
Solution :
Lancer un téléchargement de fichier via une requête AJAX n'est pas réalisable. Pour cette tâche, un accès direct au fichier est requis.
Solution mise à jour (27 avril 2015) :
Utiliser l'attribut « télécharger » :
JavaScript :
// Check if 'download' is supported if ('download' in HTMLAnchorElement.prototype) { // Create an anchor element var anchor = document.createElement('a'); // Set 'download' attribute and file URL anchor.download = 'file.txt'; anchor.href = 'download.php'; // Trigger file download anchor.click(); } else { // Fallback to previous method window.location = 'download.php'; }
Solution originale :
Utiliser 'window.location' :
JavaScript :
$.ajax({ url: 'download.php', type: 'POST', success: function() { window.location = 'download.php'; } });
Pour plus de simplicité, il est recommandé d'éviter complètement la requête AJAX et d'utiliser simplement 'fenêtre.emplacement'.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!