私はこれまでのところ運が悪かったので、phpスクリプトループのライブポーリングを実装しようとしています。これが私がこれまでに持っているものです:
フォーム送信時:
$.ajax({
data: $(this).serialize(),
success: showResponse,
url: 'process.php',
type: 'post'
});
function showResponse(){
$.ajax({
type: "GET",
url: "progress.php",
cache: false,
success: function(data) {
var response = $.parseJSON(data);
if (response.processing === true) {
console.log("Current Item: " + response.currentItem +
"Total Items: " + response.totalItems +
"Percent Complete: " + response.percentComplete);
setTimeout(checkProgress, 1000);
});
}
process.phpスクリプトの場合:
session_start();
echo json_encode(array("processing" => true));
$totalItems = 10000000;
$_SESSION['totalItems'] = $totalItems;
$_SESSION['processing'] = true;
$_SESSION['error'] = false;
for ($i=0; $i <= $totalItems; $i++) {
$_SESSION['currentItem'] = $i;
$_SESSION['percentComplete'] = round(($i / $totalItems * 100));
}
進行中のphpスクリプト:
session_start();
echo json_encode(array(
"processing" => $_SESSION['processing'],
"error" => $_SESSION['error'],
"currentItem" => $_SESSION['currentItem'],
"totalItems" => $_SESSION['totalItems'],
"percentComplete" => $_SESSION['percentComplete']
)
);
ここでどこが間違っているのかわかりませんが、100%完了したらループするだけです。任意の提案をいただければ幸いです!
編集 私は上記をprocess.phpでapcを使用するように変更しました:
apc_store('totalItems', $totalItems);
apc_store('processing', true);
apc_store('error', false);
apc_store('currentItem', $i);
apc_store('percentComplete', round(($i / $totalItems * 100)));
そしてprogress.php内:
echo json_encode(array(
"processing" => apc_fetch('processing'),
"error" => apc_fetch('error'),
"currentItem" => apc_fetch('currentItem'),
"totalItems" => apc_fetch('totalItems'),
"percentComplete" => apc_fetch('percentComplete')
)
);
それでも私が望んでいるように正しく機能しません、私は何か間違ったことをしていますか?スクリプトが完了するまではfalse値のみが表示され、セッションの使用が以前と同じように100%表示されます。何か案は?