Maison >interface Web >js tutoriel >Comment forcer le téléchargement d'un fichier CSV après sa création avec PHP et AJAX ?
Comment télécharger un fichier via AJAX en PHP
Lorsque vous travaillez avec des applications Web, il est souvent nécessaire de télécharger des fichiers depuis le serveur. AJAX (JavaScript asynchrone et XML) offre un moyen de lancer de tels téléchargements sans recharger la page.
Une méthode consiste à créer un bouton qui déclenche une fonction AJAX. L'extrait de code suivant illustre cette approche :
<code class="php">function csv(){ $ajaxRequest = ajax(); $postdata = "data=" . document.getElementById("id").value; $ajaxRequest.onreadystatechange = function(){ var ajaxDisplay = document.getElementById('ajaxDiv'); if($ajaxRequest.readyState == 4 && $ajaxRequest.status==200){ ajaxDisplay.innerHTML = $ajaxRequest.responseText; } } $ajaxRequest.open("POST","csv.php",false); $ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); $ajaxRequest.send($postdata); }</code>
Cependant, la question ici est de savoir comment forcer le téléchargement d'un fichier CSV créé après sa création par PHP. Le script fourni dans le fichier PHP est le suivant :
<code class="php">$fileName = 'file.csv'; $downloadFileName = 'newfile.csv'; if (file_exists($fileName)) { header('Content-Description: File Transfer'); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename='.$downloadFileName); ob_clean(); flush(); readfile($fileName); exit; } echo "done";</code>
Le problème est que l'exécution de ce script ne lance pas de téléchargement mais affiche à la place le contenu du fichier CSV dans la page (à l'intérieur de l'ajaxDiv) .
La réponse à ce problème est qu'AJAX n'est pas destiné au téléchargement de fichiers. Au lieu de cela, la meilleure pratique consiste à ouvrir une nouvelle fenêtre et à définir son adresse sur le lien de téléchargement. Alternativement, vous pouvez rediriger directement la page vers le lien de téléchargement en utilisant document.location = .....
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!