Maison  >  Article  >  interface Web  >  Comment forcer le téléchargement d'un fichier CSV après sa création avec PHP et AJAX ?

Comment forcer le téléchargement d'un fichier CSV après sa création avec PHP et AJAX ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 08:35:02757parcourir

How to Force Download a CSV File After Creation with PHP and 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn