ホームページ >ウェブフロントエンド >jsチュートリアル >PHP で AJAX 経由で CSV ファイルを強制ダウンロードする方法

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

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

How to Force-Download a CSV File Through AJAX in PHP?

PHP と AJAX を使用したファイルのダウンロード

質問:

AJAX 経由で CSV ファイルを強制ダウンロードするにはどうすればよいですか? call in PHP?

Background:

ユーザー入力に基づいて CSV ファイルを生成する AJAX 関数を作成しました。作成後、ユーザーにプロンプ​​トを表示せずにファイルを自動的にダウンロードしたいとします。

PHP コード:

PHP ファイル (csv.php) で、次のことを試みました。次のスクリプトを使用して CSV ファイルを強制的にダウンロードします:

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

問題:

このスクリプトを csv.php の最後で実行すると、ファイルはダウンロードされずにページに表示されます。

解決策:

AJAX はファイルの直接ダウンロードに使用できません。ファイルを強制的にダウンロードするには、次のいずれかの方法を使用できます:

  • 新しいウィンドウをポップアップ: ダウンロード リンクをアドレスとして新しいウィンドウを作成します。
  • document.location = ...: document.location = ... プロパティを使用して、ドキュメントの現在の場所をダウンロード リンクに設定します。

例:

次のように AJAX 関数を変更して、ダウンロード リンクを含む新しいウィンドウをポップアップ表示できます:

<code class="javascript">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) {
            window.open(ajaxRequest.responseText);  // Pop up a new window with the download link
        }
    }

    ajaxRequest.open("POST", "csv.php", false);
    ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajaxRequest.send(postdata);
}</code>

以上がPHP で AJAX 経由で CSV ファイルを強制ダウンロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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