Получить прогресс PHP Script, используя jQuery.ajax

Я использую ajax jQuery для запуска сценария php с ниже:

jQuery.ajax({
type: "POST",
url: "my_php_script.php",
success: function( response ) {
console.log(response);
},
error: function(){
console.log('error is...');
}
});

my_php_script.php проходит через массив и на каждом продукте запускается функция:

$count = count($array);
$i = 0;
foreach ($array as $item) {
myFunction($item);
$i++;
if($i == $count){
echo json_encode('all done and a success');
}
}

Это все работает, но сценарий обычно может занять около 2-3 минут, поэтому мне нужно показать прогресс зрителя во время его работы. Как я могу это сделать?

Я могу получить процент от цикла, добавив

$percent = intval($i/$count * 100)."%";
echo json_encode($percent);

в мой PHP-цикл как так:

$count = count($array);
$i = 0;
foreach ($array as $item) {
myFunction($item);

$percent = intval($i/$count * 100)."%";
echo json_encode($percent);

$i++;
if($i == $count){
echo json_encode('all done and a success');
}
}

Но как я могу получить это значение в моем jQuery-вызове ajax?

2

Решение

$.ajax({
url: path,
xhrFields: {
onprogress: function (e) {

}
},
success: function (response) {

}
});

Нашел этот пример, надеюсь, это поможет.

1

Другие решения

Получил это в итоге, написав процент в текстовом файле с уникальным именем, как в моем цикле массива:

$percent = intval($i/$count * 100)."%";
$_text = file_get_contents($_file);
$_text = $percent;
file_put_contents($_file, $_text);

И затем в моей html-странице я проверяю содержимое файла каждые 2 секунды:

jQuery.get('file.txt?'+new Date(), function(data) {
console.log(data);
}, 'text');

Я уверен, что это не лучший способ сделать это, но заставить это работать в ограниченный период времени — это все, что я мог придумать. Надеюсь, это поможет кому-то еще

0

По вопросам рекламы [email protected]