#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, но если отображение статуса так важно, то почему нет?
Комментариев нет:
Отправить комментарий