UIでレンダリングされるクライアント側にJSON配列があります。ユーザーはコンテンツをファイルとしてダウンロードしたいと考えています。クライアント側からサーバーにコンテンツを送信し、ファイルとしてダウンロードするにはどうすればよいですか。
POST Ajax リクエストではファイルをダウンロードできないことがわかりました。どうすればできますか?
UIでレンダリングされるクライアント側にJSON配列があります。ユーザーはコンテンツをファイルとしてダウンロードしたいと考えています。クライアント側からサーバーにコンテンツを送信し、ファイルとしてダウンロードするにはどうすればよいですか。
POST Ajax リクエストではファイルをダウンロードできないことがわかりました。どうすればできますか?
コンテンツがクライアントでしか利用できない場合は、それをサーバーに送信する必要があります。次のようなことを試してください:
<a id="download_link">Download</a>
$('#download_link').on('click', function(e){
e.preventDefault();
window.location = 'my-handler.php?json=' + myJsonString;
});
// or without jQuery
document.getElementById('download_link').onclick = function(){
window.location = 'my-handler.php?json=' + myJsonString;
};
my-handler.php
次に、サーバーに送信されたデータをファイル コンテンツとして使用して、 でダウンロードを強制します。
// Use equivalent in your server side script if not using PHP
$filename = 'download-'.time().'.json';
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: Binary');
header('Content-disposition: attachment; filename="'.$filename.'"');
exit($_GET['json']);
この方法を使用すると、現在のウィンドウは置き換えられませんが、ダウンロード プロンプトが開始されますが、必要に応じて新しいウィンドウで開くことができます。
これは迅速で汚い解決策です。これにより、人は何でも入力してファイルをダウンロードできることに注意してください。少なくともコンテンツを最初に検証するのが賢明かもしれません。コンテンツが大きすぎるという問題もあるかもしれません。