実行時間の長いPHPスクリプトのAjaX呼び出しを実行する必要があります。私の目標は、この実行の進捗状況を表示することです。AjaX呼び出し中の処理で初期値と最終値のみが表示されます
アイデアは、サーバに実行のステータスを定期的に問い合わせるためのAjaX呼び出しを作成することです。進捗状況は$_SESSION['progress']
に格納され、最初に0
に設定され、実行中にスクリプトから変更されます。
私のコードはクライアント側とサーバー側です。
クライアント側
// invoke the script (ie. with button)
$('#start').click(function()
{
$.ajax
({
url: "long-script.php"
});
});
// check progress periodically
setInterval(progress, 100);
function progress()
{
$.ajax
({
dataType: "json",
url: "progress.php",
success: function(data)
{
console.log(data);
}
});
}
長script.php
// just an example to emulate execution
sleep(1);
$_SESSION['progress']=30;
sleep(1);
$_SESSION['progress']=70;
sleep(1);
$_SESSION['progress']=100;
progress.php
header('Content-Type: application/json');
echo json_encode($_SESSION['progress']);
PROB実行中にconsole.log()
が実行され、スクリプトの実行前に0
が出力され、実行中にデータの出力が停止され、最後にスクリプトが終了すると100
が出力されます。私は何が欠けていますか?
これはセッションに書かれていない問題を直接扱いますが、このように$ _SESSIONを使用せずにOPが望んでいることを達成するためのより良い方法があるとは言いません。 –
@cale_bは論争していません。彼の方法を回避してOPを表示したかっただけです。 –
@cale_b: "恐らくもっと良い方法を達成するには..."より良い提案があれば、私はそれらについて聞いてうれしいです。 – Giorgio