Я пытаюсь реализовать прямой опрос петли сценария 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%. Любые предложения будут ценны!
EDIT Я изменил приведенное выше на использование apc в process.php:
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') ) );
Все еще не работает должным образом, как я хочу, чтобы он работал, я что-то неправильно делаю? Он показывает только ложные значения до тех пор, пока скрипт не завершится и покажет 100%, как это делалось ранее. Есть идеи?