PHPスクリプトがバックグラウンドでしばらく処理されている間に何が起こっているのかをユーザーに表示したいので、JavascriptまたはJQueryを使用してtextAreaにレポートを印刷しようとしています。
そのため、setTimeout(...) を使用して textArea を自動的に更新し、クライアント側でその変数を取得して textArea に出力する処理中に、PHP スクリプトを介してセッションでレポート値を設定しようとしました。
これが私が使用したコードです:
/*
* The client side javascript function that updates the textArea value.
*/
function updateReport() {
var reportValue = '<?php echo( $_SESSION[ 'report' ] ); ?>';
document.forms[ 'start_send_form' ].elements[ 'reportTextArea' ].value = reportValue;
setTimeout(function () {
updateReport();
}, 500);
}
クライアント側から Ajax(JQuery) リクエストを介して呼び出される php スクリプト:
<?php
$report = "";
for( $i = 0; $i < $number_of_items_to_process; $i++ ) {
$report .= "- Processing a new item";
$_SESSION[ 'report' ] = $report;
// .... Process some long code here.
}
?>
しかし、 updateReport() は最初に呼び出されたときに一度だけ実行され、PHP スクリプトが完了すると再開されるようです。
これについて説明してもらえますか?
そして、私が望むものを達成する方法はありますか?
---------------------------------- >>更新: $ の更新された値を取得するために使用するコード_SESSION[ 'report' ] サーバー側から:
// 1. JavaScript :
function updateReport() {
$.ajax({
url: "test2.php",
type: "POST",
cache: false,
success: function( returned_value ){
var reportValue = $.trim( returned_value );
alert(reportValue); // All messages appear after PHP script ends.
}
});
setTimeout(function () {
updateReport();
}, 500);
}
// 2. test2.php(Script just made to get $_SESSION[ 'report' ]) :
<?php
if ( !isset( $_SESSION ) ) session_start();
echo( $_SESSION[ 'report' ] );
?>