MW211 EXIT

devlog
jQuery/Ajaxサブ画面からのダウンロード
2013年11月28日
Ajaxでサブ画面をはめ込んだとして、そこにファイルダウンロードボタンが
あったならば、このボタンを使えるものとできるのか?

答えは簡単にできる

呼び出される側で、以下を最初に出力してファイルの中身をその次に標準出力する。
┌──────────────────────────────────────┐
│header('Content-Disposition: attachment; filename="ダウンロード.txt"');     │
│header('Content-Type: application/octet-stream');                           │
└──────────────────────────────────────┘
一種の盲腸線みたいなもんだから画面表示はせずexit()で終わらせてしまう。

で、ダウンロードボタンでは「location.href=」でそれを指定するだけでよい。

Ajaxでダウンロードファイルを取ってきて、それを渡してみたいな仲介はいらない。

紐づけてやれば(紹介してやれば)、それでOK。バッファはいらない。

┌──────────────────────────────[download1.htm]┐
<html>
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
<meta http-equiv="Content-Script-Type" content="text/javascript"/>
<script type="text/javascript" src="jquery.js"></script><!-- ★jQuery -->
<script type="text/javascript">
$(function() {
    $.get(
        'download2.php',
        function(data) {
            $('#sub').html(data);
        }
    );
});
</script>
<title>ダウンロード画面</title>
</head>
<body>
<div id="sub"></div>
</body>
</html>
└──────────────────────────────────────┘
┌──────────────────────────────[download2.php]┐
<?php
if (isset($_GET['dl'])) {
    header('Content-Disposition: attachment; filename="download.txt"');
    header('Content-Type: application/octet-stream');
    echo 'ダウンロードファイルの中身です';
} else {
    echo <<<___HTML___
<input type="button" value="ダウンロード実行"
 onClick="location.href='download2.php?dl';"/><br/>

___HTML___;
}
└──────────────────────────────────────┘
分類:jQuery