session_start();
if(isset($_GET['progress'])){
$status_done = '0';
if($_SESSION['progress_percentage'] == "100"){
$status_done = '1';
}
echo json_encode(array(
'progress_percentage' => $_SESSION['progress_percentage'],
'progress_status' => $_SESSION['progress_status'],
'progress_done' => $status_done
)
);
}
elseif(isset($_GET['dummytask'])){
for ($i = 1; $i <= 100; $i++) {
$_SESSION['progress_percentage'] = $i;
$_SESSION['progress_status'] = 'Checking the locks and stuffing the dolls!';
sleep(1);
}
}
$(document).ready(function(){
var timeout = '';
function checkProgress(){
console.log('Checking progress event started');
$.ajax({
url: 'http://willetu54.fiftyfour.axc.nl/dgi/ajax.php?progress&time='+ new Date().getTime(),
cache: false,
dataType: 'json'
}).done(function(data) {
$('#progressbar-progress').html(data.progress_status +'('+ data.progress_percentage +')');
console.log('Progress checked');
console.log(data);
if(data.progress_done == "1"){
clearTimeout(timeout);
}
}).fail(function(jqXHR, status, error){
console.log('Check Progress: Error: '+ error + status +'');
});
}
function checkProgressTimeout(){
checkProgress();
console.log('Timeout tick for progress');
timeout = setTimeout(checkProgressTimeout, 500);
}
$('#menu-open').click(function(event){
checkProgressTimeout();
console.log('starting dummy task');
event.preventDefault();
$.get('http://willetu54.fiftyfour.axc.nl/dgi/ajax.php?dummytask', function(data) {
alert('Load was performed.');
});
});
});
こんにちは再びスタックオーバーフロー!
私が現在開発中のシステムには、実行速度が非常に遅く、場合によっては最大 20 秒かかるスクリプトがあります。(大量のフォルダの作成、大量のファイルの移動など)。それが、このスクリプトを設計した理由です。約 100 秒しか持続しない小さなダミータスクを作成しました。AJAX を使用してそのスクリプトを起動すると、一定量のタスクが完了します。タスクが完了するたびに、$_SESSION
変数をスクリプトの進行状況で更新し、それを別の jQuery スクリプトでページにロードします。
しかし、それはちょっと奇妙に機能します。checkProgressTimeout
およびダミータスクを起動すると思います(checkProgressTimeout
関数を使用すると、500ミリ秒ごとに進行状況をチェックします)が、コンソールを見ると、イベントが発生するだけで、ダミータスクが完了するまで結果が得られないことがわかります。同じ timeval (500ms) で進行状況チェックをゆっくりと返します。
この問題は Google Chrome で発生します。スクリプトは IE ではまったく機能しません。
jsFiddle をセットアップしました: http://jsfiddle.net/nZAs4/2/。しかし、jsFiddle は PHP スクリプトをサポートしていないため、自分の Web ホストの 1 つに自分でアップロードする権限を取得しました。(Access-Control-Allow-Origin も許可しました)。
では、どうすればこれを機能させることができますか?