6

このコードを使用すると、サーバー スクリプトの実行中にアニメーション GIF を表示できます。

function calculateTotals() {
    $('#results').load('getResults.php', null, showStatusFinished);
    showLoadStatus();
}

function showLoadStatus() {
    $('#status').html('');
}


function showStatusFinished() {
    $('#status').html('Finished.');
}

ただし、「20000 の 342 行目を処理しています...」など、スクリプトの進捗状況を表示し、完了するまでカウントアップしたいと考えています。

どうやってやるの?更新された情報を常に含むサーバースクリプトを作成できますが、これを毎秒読み取るコマンドをどこに配置すればよいでしょうか?

4

4 に答える 4

2

アンドリューの答えへのコメントを読んだ後。

次のようにステータスを読み取ります。

function getStatus() {
    $.getJSON("/status.php",{"session":0, "requestID":12345}, 
    function(data) { //data is the returned JSON object from the server {name:"value"}
          setStatus(data.status);
          window.setTimeout("getStatus()",intervalInMS)
    });
}

この方法を使用すると、サーバー上で複数の XHR リクエストを同時に開くことができます。

出力に関するすべての status.php は次のとおりです。

{"status":"We are done row 1040/45983459"}

ただし、応答に必要なだけ多くの情報を出力し、それに応じて処理することができます (たとえば、プログレス バーをフィードしたり、アニメーションを実行したりします..)

$.getJSON の詳細については、http: //docs.jquery.com/Ajax/jQuery.getJSON を参照してください。

于 2008-10-03T06:11:10.200 に答える
1

私はjQueryの詳細に落ち込んでいませんが、ポーリングを含まない一般的な答えは次のとおりです。永遠のフレーム手法のバリエーションを使用してください。基本的には非表示の iframe を作成し、その src を「getresults.php」に設定します。getresult 内では、実際に進行状況を更新する親ドキュメント内の javascrpt 関数への呼び出しであるスクリプト ブロックを「ストリーミング」します。これは、永遠のフレームの背後にある基本的な考え方を示すです。(彼の実際の JS や HTML を使用することはお勧めしませんが、それはかなり平均的です)

于 2008-09-16T12:31:11.213 に答える
0

サーバー側のスクリプトは、サーバー上のどこか (ファイル、データベース内のフィールド、memcached など) で進行を維持する必要があります。

現在の進行状況を返す AJAX 関数が必要です。この関数を 1 秒に 1 回ポーリングし、それに応じて結果をレンダリングします。

于 2008-09-16T12:19:17.670 に答える
0

サーバー側のコードがどのように機能するかを知らなければ、それを言うのは困難です。ただし、プロセスには 3 つの段階があります。まず、ジョブ作成スクリプトを呼び出す必要があります。これにより、ID 番号が返され、サーバーが動作するように設定されます。次に、約 1 秒ごとに、表示するステータス メッセージを返すステータス スクリプトを呼び出す必要があります。そのステータス スクリプトは、ジョブが終了したかどうかを示す値も返す必要があります。ジョブが終了したことをステータス スクリプトが示したら、ポーリングを停止します。

このステータス スクリプトを取得する方法は、ジョブのステータスを知ることであり、サーバーのセットアップ方法に大きく依存しますが、おそらくジョブ中のさまざまな時点でデータベース テーブルにメッセージを書き込む必要があります。ステータス スクリプトは、データベースからこのメッセージを読み取ります。

于 2008-09-16T12:22:33.513 に答える