1. ホーム
  2. javascript

[解決済み] ajax リクエストを使用してファイルをダウンロードする

2022-11-01 16:40:13

質問

ボタンをクリックした時に、ajax download request"を送信したいので、この方法で試してみました。

javascriptを使用しています。

var xhr = new XMLHttpRequest();
xhr.open("GET", "download.php");
xhr.send();

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");
?>

が、期待したように動作しません、どうすればいいですか?ありがとうございました。

どのように解決するのですか?

2015年4月27日更新

HTML5シーンにアップしてきたのは ダウンロード属性 . これは 対応 であり、まもなくIE11にも導入されます。あなたのニーズによっては、AJAXリクエストの代わりにこれを使用することもできます(あるいは window.location を使用する)代わりに使用することもできます。

あなたはいつでも、AJAX リクエストを window.location を使用することでフォールバックさせることができます。 JavaScript を使って、もし download がサポートされているかどうかをテストし、サポートされていない場合は window.location .

オリジナルの回答

あなたは物理的にダウンロードを促すためにファイルに移動する必要があるので、AJAXリクエストはダウンロードプロンプトを開くことができません。代わりに、download.phpに移動するために成功関数を使用することができます。これはダウンロードのプロンプトを開きますが、現在のページを変更しません。

$.ajax({
    url: 'download.php',
    type: 'POST',
    success: function() {
        window.location = 'download.php';
    }
});

これは質問に対する答えであるにもかかわらず、単に window.location を使用し、AJAXリクエストを完全に回避する方が良いでしょう。