ブラウザ自体でポスト リターンを検出する方法はまだ見つかっていないようですが、AJAX を使用する別の可能性があります。ただし、もう少し複雑です。
<script type="text/javascript">
$(function () {
$('#submitbtn').click (function () {
window.setTimeout (dldone, 100);
return true;
});
function dldone () {
$.get ("/downloadstatus?rand="+$('#rand').val (), function (data) {
if (data == 'done') {
// data generation finished, do something
} else {
window.setTimeout (dldone, 100);
}
});
}
});
</script>
<form action="/generatedata" method="post">
<input type="hidden" id="rand" value="[RANDOMVALUE]">
<input type="submit" id="submitbtn" value="Download Data">
</form>
サーバーでは、データ生成が完了したときに通知するために、プロセス間通信を行う必要があります。すでにデータベースがあるので、次のようにしました。
public function downloadstatusAction () {
if ($this->db->fetchOne ("SELECT rand FROM dlstatus WHERE rand = ?", (int) $_GET["rand"])) {
$db->delete ("dlstatus", array ("rand = ?" => (int) $_GET["rand"]));
print "done";
} else {
print "loading";
}
}
public function generatedataAction () {
// generate data
$this->db->insert ("dlstatus", array ("rand" => (int) $_POST["rand"]));
// output data
}
これを行うためのよりエレガントな方法があると確信していますが、アイデアはわかります。これは、私がテストしたすべてのブラウザーで問題なく動作するようです。