処理時間が長いajaxの実行中に、進捗状況を確認する処理を入れようとしています。
この処理がうまく行けば、プログレスバーを設置したいのですが、最後の数値しか取れない状況です。
具体的には、
//実際の処理を行うajax $("#Btn").click(function(){ //DBの値を取得する関数を一定間隔で実行 setInterval("statusUpdate()", 1000); $.ajax({ url: "{{ url('/accept') }}/", type: 'get' }).done(function (response) { --- 略 --- //DBの値を取得する関数 function statusUpdate() { console.log("実行中"); $.ajax({ url: "{{ url('/progress/get_status') }}/", type: "POST", dataType: 'text', data : { user_id : "{{$user_id}}", method_name : "upload", } }).success(function (response) { console.log(response); --- 略 ---
実行すると、console.logには、
1秒間隔に、"実行中"だけが表示され、
結局最終的にconsole.log(response);の結果が1回だけ表示されます。
目的としては、1秒間隔に、"実行中"の後に、console.log(response);の値も取得したいのです。
このような処理はそもそも無理なのでしょうか?
有識者の方、ご教授よろしくお願いいたします。
追記です。
実際の処理といっているajaxで行なっている「url: "{{ url('/accept') }}/",」では、時間がかかるphpのプログラムを実行しているのですが、内容としましては指定のファイルをチェックしたり、ファイルの項目で計算したりする処理です。最終的に、処理が終わったタイミングで、successというテキストをjavascript側に返しています。
この処理の中で、progressというテーブルに、進捗状況を「progress_no」という項目にアップデートしていきます。処理の最初が1で最後が100という形で、テーブルの「progress_no」の値を更新します。
そして、「url: "{{ url('/progress/get_status') }}/",」では、上記のprogressテーブルの「progress_no」の値を抽出し、javascript側に「progress_no」を返します。
現状では、最後の100しか取れていない状況です。
これで情報足りますでしょうか?
さらに追記です。update処理は、以下のようになっていまして、commitはしていません。
試しに、以下のプログラムの最後に、 DB::commit();を追加してみましたが、状況は変わりませんでした。
public function updateProgressStatus($userID, $method_name, $statusCode) { DB::table('progress') ->where('user_id', '=', $userID) ->where('method_name', '=', $method_name) ->update(['progress_no' => $statusCode]); }
回答1件
あなたの回答
tips
プレビュー