いつもお世話になっております。
重いバッチ処理を実行する際に、バックグラウンドで実行させてユーザを待たせないようにしたいと考えています。
しかし、Ajaxで処理実行後、画面遷移ができずにエラーが返ってきます(サーバ側(PHP)の処理は継続している)。
具体的には下記のようにしたいと考えています。
- 集計画面に集計ボタンがある。
- 集計ボタンを押すとサーバ側で処理が実行される。
- 集計ボタンを押すと画面遷移はせず、ローディングアイコンに切り替わる(ぐるぐる回っているだけ)
- 集計ボタンを押したら画面遷移してもブラウザを落としても処理は継続される。
集計ボタン押下のタイミングと、集計画面を開いたタイミングでバッチ処理の状況をDBから取得し、継続中ならローディングアイコン、終わっていれば(または処理対象がなければ)通常画面を表示、
といった動きを想定しております。
ソースは以下のように書きました(抜粋)
HTML
1<input type="submit" class="btn" onclick='calcExec()' value="集計" />
Javascript
1 2function calcExec(){ 3 $(function(){ 4 $.get('/execute', { hoge : hoge }).done(function(data){ 5 ・・ ・ 6 }); // 処理中に画面遷移するとstatus=0のエラーが返る。 7 8 checkStatus(); 9 }); 10} 11 12function checkStatus(){ 13 $(function(){ 14 polling = setInterval(function(){ 15 $.get('/check', {fuga : fuga}).done(function(data){ 16 if(data == 0){ // PHP側で処理が終わったら0を返す 17 clearInterval(polling); 18 } 19 }); 20 }, 5 * 1000); 21 }); 22} 23
回避策をご教授いただけると幸いです。
基本的なことかと思いますが、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。