Здравствуйте.
Столкнулся с проблемой выполнения AJAX-запроса при перезагрузке страницы.
Опишу задачу. Есть множество документов в системе, которые девушки-бухгалтерши быстро проверяют и обрабатывают. Каждый документ после обработки 5-6 секунд заносится в базу на удаленном сервере (ускорить этот процесс нельзя). Эта операция очень тормозит процесс работы и бесит девушек.
Делал так: отправлял асинхронный AJAX-запрос и перезагружал страницу (сразу). Однако он не выполняется, если не дождаться success. Как заставить запрос выполняться и при этом сразу перезагрузить страницу, показав следующий документ?
Спасибо.
1. maxegorov - 22 Января, 2015 - 19:27:47 - перейти к сообщению
2. SAD - 22 Января, 2015 - 19:34:12 - перейти к сообщению
А если произойдет ошибка с предыдущим? Пусть ждут. Либо нужно логику конкретно менять
3. maxegorov - 22 Января, 2015 - 19:38:07 - перейти к сообщению
SAD пишет:
А если произойдет ошибка с предыдущим? Пусть ждут. Либо нужно логику конкретно менять
Простите, забыл указать. Документы с ошибками специальным образом помечаются, их потом обрабатывают повторно. Это очень редкий случай, и нет смысла ждать при каждом запросе 5-6 секунд ради возможного сообщения об ошибке.
4. Мелкий - 22 Января, 2015 - 20:30:31 - перейти к сообщению
Комплексное решение правильное:
После обработки заносить документ в очередь на обработку и сразу возвращать управление пользовательскому интерфейсу.
Фоновый процессом разгребать очередь. В этом случае уже не имеет значения, сколько времени выполняется задача - отзывчивости интерфейса это не мешает.
После обработки заносить документ в очередь на обработку и сразу возвращать управление пользовательскому интерфейсу.
Фоновый процессом разгребать очередь. В этом случае уже не имеет значения, сколько времени выполняется задача - отзывчивости интерфейса это не мешает.
5. 3d_killer - 22 Января, 2015 - 21:39:06 - перейти к сообщению
Мелкий, и где эта очередь должна будет висеть?
6. SAD - 22 Января, 2015 - 23:09:25 - перейти к сообщению
Можно писать задания на обработку в базу. потом кроном запускать скрипт, который будет их обрабатывать
7. Мелкий - 23 Января, 2015 - 08:27:49 - перейти к сообщению
3d_killer пишет:
и где эта очередь должна будет висеть?
От сервера очередей до статуса "в очереди" в БД.
8. nerv - 24 Января, 2015 - 10:28:41 - перейти к сообщению
Можно страницу не перезагружать
1. поставили обработчик ожидания ответа на аякс (success/error)
2. отправили форму
3. сделали ресет текущей форме (очистили все поля) пользователь начал работать с новой формой
4. в случае, если ранее отправленная форма невалидна или запрос завершился с ошибкой, можно сообщить об этом пользователю
Проще всего реализовать через ООП, где есть
1. класс Отчета (или что они там у тебя заполняют), который может делать getState()/setState()
2. Очередь состояний. Можно завести StateManager (смотри по обстоятельствам)
3. класс App, который взаимодействует с отчетом, менеджером состояний, отправляет состояния(?)
Т.о. в рамках одной страницы ты сможешь делать задуманное + править неверные формы
1. поставили обработчик ожидания ответа на аякс (success/error)
2. отправили форму
3. сделали ресет текущей форме (очистили все поля) пользователь начал работать с новой формой
4. в случае, если ранее отправленная форма невалидна или запрос завершился с ошибкой, можно сообщить об этом пользователю
Проще всего реализовать через ООП, где есть
1. класс Отчета (или что они там у тебя заполняют), который может делать getState()/setState()
2. Очередь состояний. Можно завести StateManager (смотри по обстоятельствам)
3. класс App, который взаимодействует с отчетом, менеджером состояний, отправляет состояния(?)
Т.о. в рамках одной страницы ты сможешь делать задуманное + править неверные формы
9. 3d_killer - 24 Января, 2015 - 20:42:52 - перейти к сообщению
я думаю если используешь AJAX, так и подгружай следующие данные так же, зачем перезагружать, пока будут обрабатывать эти данные придет ответ и не надо мудрить очереди всякие