単純な php ループの進行状況インジケーターを作成しようとしています。
ここには進行状況とphpループに関するajax / phpの質問がたくさんありますが、それらの多くを読んだ後でも、ロジックを実装できません(正確に理解することもできません)..
それらのほとんどは、-upload-プログレス バーについて話しているか、特定のケースに限定されすぎているかのどちらかです (それか、検索する適切なキーワードの選択方法がわからない)
私の最終的な目標は、プログレス バーを作成することですが、手始めに、少しエコー ループを試してみました。
私は次のことを試しました:
HTML フォーム :
<p class="submit">
<input type="submit" class="button-primary" id="o99_sudi_do_now" value="<?php _e('DO IT NOW !', 'o99_sudi_domain'); ?>" />
<img src="<?php echo admin_url('/images/wpspin_light.gif'); ?>" class="waiting" id="o99_sudi_loading" style="display:none;"/>
</p>
<div id="o99_sudi_results"></div>
jQuery
jQuery(document).ready(function($){
jQuery('#o99_sudi_do_now_form').click(function(e){
e.preventDefault();
jQuery.post(ajaxurl,{action:'o99_random_loop'}, function(data){
jQuery('#o99_sudi_results').empty().append( data );
});
});
});
PHP
function o99_random_loop_cb(){
for ($i = 0; $i < 10; $i++) {
//ob_end_clean(); // [TESING]
echo '-- step' .$i . ' of 10</br>';
//flush();// [TESING]
//usleep(100000000000*0.1); // total time 10 sec.// [TESING]
//ob_flush();// [TESING]
usleep(20000);
}
die();
そしてそれはすべてワードプレスの管理エリアにあるので -
add_action( 'wp_ajax_o99_random_loop', 'o99_random_loop_cb' );
結果(または出力)は次のとおりです。
-- Step 0 of 10
-- Step 1 of 10
-- Step 2 of 10
-- Step 3 of 10
-- Step 4 of 10
-- Step 5 of 10
-- Step 6 of 10
-- Step 7 of 10
-- Step 8 of 10
-- Step 9 of 10
これはまあまあですが、問題は、実行が終了したときにのみ出力が到着し、divが更新されることです-そして、それをオンザフライで段階的に更新したい...(私の実際の計画されたループは非常に長く、反復に約 2 ~ 3 秒かかります。)
コードでわかるように、私は試してみましたがflush();
、ob_flush();
私が見た他の提案はありますが、ここでロジックが間違っていると思われます(ワードプレスですか??または間違った場所でフラッシュするためですか?)そして実際には、どのようにずっと私flush()
; - 関数が ENDING の場合にのみ結果が到着する..
私の目標は進行状況バーを作成することです-しかし、今のところ、単純なエコー進行状況の助けさえあれば素晴らしいでしょう..