Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Прогресс бар долгого скрипта на ajax

#php #javascript


Есть долгий скрипт на сервере который запускается через ajax, пытаюсь сделать для
него прогрессбар. 
Скрипт на сервере запускается 

session_start();
$_SESSION['process']=0;
session_write_close();


Что то там делает в процессе 

foreach ($clear as $key => $array) {
$_SESSION['process'] = round(($key * 100 / $count)/2);
session_write_close();
//бла бла
}


Вторым запросом опрашиваю другой файл скрипта на сервере

session_start();
$array = array('process'=>$_SESSION['process']);
echo json_encode($array);


Но вот беда не работает так как хотелось бы, данные не обновляющийся, а если в цикле
добавить session_start(); то обновляются где то раз 50 и потом ошибка валит 


  net::ERR_RESPONSE_HEADERS_TOO_BIG


Нашел ответ https://stackoverflow.com/questions/17186675/why-i-get-err-response-headers-too-big-on-chrome
header_remove ("Set-Cookie"); 

Читал на хабре в комментах писали что так не стоит делать, дабы вопросу не пропадать,
как стоит делать?
    


Ответы

Ответ 1



Наиболее простой вариант, который напрашивается исходя из вашей текущей архитектуры - писать % во временный файл, из него читать 2м скриптом, удалять его по окончании срипта. Более красивое решение: Страница с ajax:

Выполнено: 0%

Серверный скрипт

Ответ 2



Пишете статус в БД – это самое простое. Или используйте потоки и вебсокеты

Ответ 3



Вы можете использовать long-pooling: 1. Создавать запрос к php скрипту, который не закрывает соединение; 2. Отправлять ответ только при изменении статуса; 3. На стороне клиента после получения ответа создавать новый запрос. php-long-polling — вот пример технологии, возможно это overkill, но если отображение статуса так важно, то почему нет?

Комментариев нет:

Отправить комментарий