@muhasa

Как в ajax-е отслеживать промежуточные состояния?

Понимаю, что формулировка и сам вопрос могут показаться странными. Изъясняюсь, как умею.
Представим, у нас есть запрос, который запускает операцию, состоящую из 5 блоков, выполняемых php на сервере.

У каждого действия свое название - инициализация, загрузка фотографии, извлечение данных, архивация, отправка клиенту. Возникает вопрос - сервер ответит нам только тогда, когда все будет выполнено, поэтому возвращать промежуточные состояния, какая сейчас идет операция, не получится (или есть варианты?)

Само собой напрашивается напилить свой вариант "пинг-понга", где запросы идут подряд с параметрами - сначала на operation.php?step=1, как закончится - на второй шаг и т.д.
Но может я велосипед изобретаю? Может уже как-то оформлено в библиотеку или какой-то шаблон проектирования или какой-то фичей в jquery напилены?
В-общем, такой вопрос.
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Саму отгрузку можно отслеживать по событию xhr.progress

Ничего о "архивации" и "извлечении" эта штука конечно не знает, но вы можете отправлять с сервера сообщения о этих действиях в стиле long polling, и выводить на клиенте.

сервер ответит нам только тогда...
конечно, если вы не можете изменить сервер, то ничего не получится.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Зачем Вы хотите всё в один поток запихнуть?! У Вас же - WEBSERVER!!!
1. Создаём на клиенте (js) класс работы с очередью - менеджер очереди задач.
2. Превращаем на стороне сервера обработчик POST-запроса в Long-Polling.
3. После "тяжёлого действия" - возвращаем события дальнейшей обработки на клиент через Long-Polling.
4. Если запрос оборвался - восстанавливаем его с помощью менеджера очереди и продолжаем собирать информацию обработки конкретного изображения.

Работа с каждым из изображений (действием из 5-ти шагов) - происходит АСИНХРОННО! вне зависимости от состояния соседних!
Это и быстро, и максимально продуктивное использование канала передачи данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы