0

すべての操作で別の Web サイトへの SOAP 呼び出しを行う必要があるため、実行に時間がかかる PHP スクリプトがあります。このスクリプトの完了率を確認できるように、プログレスバー インジケーターを追加したいと思います。

これを行う方法は、PHP を実行する非同期 Ajax 呼び出しを実行してから、% complete を更新する別の Ajax 呼び出しを行うことだと思います。しかし、私はこれをまとめるのに多くの問題を抱えています。

これまでのところ、私はこれしか持っていません:

<script language='Javascript'>

$().ready(init);

function init() {       
    $.get('importStatement.php');           
}

$(function() {
$( "#progressbar" ).progressbar({
  value: 0
});
});

</script>

<div id="progressbar"></div>

完了率 ($i) を出力する PHP スクリプト:

$current_day = $date->today;
$days_to_read = 45;
// Scroll through the last $days_to_read dates and import a statement for that day
for ($i = 0; $i < $days_to_read; $i++) {
    $statement_date = $date->convertToMysql($current_day);
    $bank->importStatement($statement_date, true);
    $percent = intval($i/($days_to_read-1) *100).  "%";
    // disable caching
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-cache, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: Mon, 26 Jul 1991 05:00:00 GMT');  // disable IE caching
    header('Content-Type: text/plain; charset=utf-8');
    echo $i;    
    $current_day = $date->decreaseDay($current_day);
}

私が戦っている理由は、進行状況を出力する importStatement.php が「切断」されているか、進行状況バーとは関係がないためです。プログレス バーには、このスクリプトからの入力が必要です。誰かが私を案内してもらえますか?

4

1 に答える 1

0

以前にこのような進行状況バーを実装しました (これが最善の方法かどうかはわかりませんが、うまくいきました)。

進行状況を保存する別の MySQL テーブルを用意します。

実際のレポートを開始するときは、ジョブ ID を使用して「進行状況」テーブルにエントリを作成します。進行状況を画面に表示するのではなく、長時間実行される PHP スクリプトで「進行状況」テーブルを継続的に更新します。ジョブ ID を受け取り、データベースから進行状況をエコーするクイック PHP スクリプトに AJAX 進行状況バーを向けます。

于 2013-11-30T19:34:56.747 に答える