Я пытаюсь реализовать простой индикатор выполнения.Это циклы до постоянного числа, и я хочу видеть текущее число цикла как прогресс.Однако он не обновляется, пока цикл не закончится.Я где-то видел, что проблема вызвана из-за блокировки сеанса, но я не мог заставить его работать.
Коды сценариев и HTML:
<script>
function makeRequest(toPHP, callback) {
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
callback(xmlhttp.response);
}
}
xmlhttp.open("GET",toPHP,true);
xmlhttp.send();
}
function loop() {
var loop_index = document.getElementById("loop_nr").value;
makeRequest("/wp-content/plugins/promc/templates/server_side.php?nr="+loop_index, function(response) {
document.getElementById("sumDiv").innerHTML="Total sum = " + response;
clearInterval(timer);
});
setInterval(makeRequest("/wp-content/plugins/promc/templates/getter.php", function(response) {
document.getElementById("percentageDiv").innerHTML=response;
}),1000);
}
</script>
<div id="percentageDiv"> Percentage div</div>
<div id="sumDiv"></div>
<input type="text" id="loop_nr" value="30000000">
<input type="submit" onclick="loop()">
Getter.php
<?php
session_start();
echo 'Progress: '.$_SESSION['progress'];
?>
Server_side.php
<?php
session_start();
if(isset($_GET['nr'])) {
$result = sum($_GET['nr']);
}
function sum($nr) {
$progress = 0 ;
$sum = 0 ;
for ($i = 1; $i <= $nr; $i++) {
$sum = $sum + $i;
$progress++;
$_SESSION['progress'] = $progress;
}
echo 'Sum: '.$sum.' Session Progress: '.$_SESSION['progress'];
}
?>