ホームページ  >  記事  >  ウェブフロントエンド  >  PHP と AJAX で作成した CSV ファイルを強制的にダウンロードするにはどうすればよいですか?

PHP と AJAX で作成した CSV ファイルを強制的にダウンロードするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 08:35:02757ブラウズ

How to Force Download a CSV File After Creation with PHP and AJAX?

PHP で AJAX 経由でファイルをダウンロードする方法

Web アプリケーションを操作する場合、多くの場合、サーバーからファイルをダウンロードする必要があります。 AJAX (非同期 JavaScript および XML) は、ページを再ロードせずにこのようなダウンロードを開始する方法を提供します。

1 つの方法には、AJAX 関数をトリガーするボタンの作成が含まれます。次のコード スニペットは、このアプローチを示しています。

<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>

ただし、ここでの質問は、PHP によって作成された CSV ファイルを強制的にダウンロードする方法です。 PHP ファイルで提供されているスクリプトは次のとおりです:

<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>

問題は、このスクリプトを実行するとダウンロードが開始されず、代わりにページ内 (ajaxDiv 内) に CSV ファイルの内容が表示されることです。 .

この問題に対する答えは、AJAX はファイルのダウンロードを目的としていないということです。代わりに、新しいウィンドウを開いてそのアドレスをダウンロード リンクに設定することをお勧めします。あるいは、document.location = .....

を使用して、ページをダウンロード リンクに直接リダイレクトすることもできます。

以上がPHP と AJAX で作成した CSV ファイルを強制的にダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。