Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как заставить AJAX-запрос выполняться при перезагрузке страницы?
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Как заставить AJAX-запрос выполняться при перезагрузке страницы?

Страниц (1): [1]
 

1. maxegorov - 22 Января, 2015 - 19:27:47 - перейти к сообщению
Здравствуйте.

Столкнулся с проблемой выполнения AJAX-запроса при перезагрузке страницы.

Опишу задачу. Есть множество документов в системе, которые девушки-бухгалтерши быстро проверяют и обрабатывают. Каждый документ после обработки 5-6 секунд заносится в базу на удаленном сервере (ускорить этот процесс нельзя). Эта операция очень тормозит процесс работы и бесит девушек.

Делал так: отправлял асинхронный AJAX-запрос и перезагружал страницу (сразу). Однако он не выполняется, если не дождаться success. Как заставить запрос выполняться и при этом сразу перезагрузить страницу, показав следующий документ?

Спасибо.
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, который взаимодействует с отчетом, менеджером состояний, отправляет состояния(?)

Т.о. в рамках одной страницы ты сможешь делать задуманное + править неверные формы
9. 3d_killer - 24 Января, 2015 - 20:42:52 - перейти к сообщению
я думаю если используешь AJAX, так и подгружай следующие данные так же, зачем перезагружать, пока будут обрабатывать эти данные придет ответ и не надо мудрить очереди всякие

 

Powered by ExBB FM 1.0 RC1