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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как заставить AJAX-запрос выполняться при перезагрузке страницы?
Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2014
Помог: 0 раз(а)
Здравствуйте.
Столкнулся с проблемой выполнения AJAX-запроса при перезагрузке страницы.
Опишу задачу. Есть множество документов в системе, которые девушки-бухгалтерши быстро проверяют и обрабатывают. Каждый документ после обработки 5-6 секунд заносится в базу на удаленном сервере (ускорить этот процесс нельзя). Эта операция очень тормозит процесс работы и бесит девушек.
Делал так: отправлял асинхронный AJAX-запрос и перезагружал страницу (сразу). Однако он не выполняется, если не дождаться success. Как заставить запрос выполняться и при этом сразу перезагрузить страницу, показав следующий документ?
Спасибо.
SAD
Отправлено: 22 Января, 2015 - 19:34:12
Постоянный участник
Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009 Откуда: Днепропетровск, Украина
Помог: 75 раз(а)
А если произойдет ошибка с предыдущим? Пусть ждут. Либо нужно логику конкретно менять
maxegorov
Отправлено: 22 Января, 2015 - 19:38:07
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2014
Помог: 0 раз(а)
SAD пишет:
А если произойдет ошибка с предыдущим? Пусть ждут. Либо нужно логику конкретно менять
Простите, забыл указать. Документы с ошибками специальным образом помечаются, их потом обрабатывают повторно. Это очень редкий случай, и нет смысла ждать при каждом запросе 5-6 секунд ради возможного сообщения об ошибке.
Мелкий
Отправлено: 22 Января, 2015 - 20:30:31
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Комплексное решение правильное:
После обработки заносить документ в очередь на обработку и сразу возвращать управление пользовательскому интерфейсу.
Фоновый процессом разгребать очередь. В этом случае уже не имеет значения, сколько времени выполняется задача - отзывчивости интерфейса это не мешает.
----- PostgreSQL DBA
3d_killer
Отправлено: 22 Января, 2015 - 21:39:06
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
Мелкий, и где эта очередь должна будет висеть?
SAD
Отправлено: 22 Января, 2015 - 23:09:25
Постоянный участник
Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009 Откуда: Днепропетровск, Украина
Помог: 75 раз(а)
Можно писать задания на обработку в базу. потом кроном запускать скрипт, который будет их обрабатывать
Мелкий
Отправлено: 23 Января, 2015 - 08:27:49
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
3d_killer пишет:
и где эта очередь должна будет висеть?
От сервера очередей до статуса "в очереди" в БД.
----- PostgreSQL DBA
nerv
Отправлено: 24 Января, 2015 - 10:28:41
Посетитель
Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013 Откуда: Россия
Помог: 9 раз(а)
Можно страницу не перезагружать
1. поставили обработчик ожидания ответа на аякс (success/error)
2. отправили форму
3. сделали ресет текущей форме (очистили все поля) пользователь начал работать с новой формой
4. в случае, если ранее отправленная форма невалидна или запрос завершился с ошибкой, можно сообщить об этом пользователю
Проще всего реализовать через ООП, где есть
1. класс Отчета (или что они там у тебя заполняют), который может делать getState()/setState()
2. Очередь состояний. Можно завести StateManager (смотри по обстоятельствам)
3. класс App, который взаимодействует с отчетом, менеджером состояний, отправляет состояния(?)
Т.о. в рамках одной страницы ты сможешь делать задуманное + править неверные формы
----- Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
3d_killer
Отправлено: 24 Января, 2015 - 20:42:52
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
я думаю если используешь AJAX, так и подгружай следующие данные так же, зачем перезагружать, пока будут обрабатывать эти данные придет ответ и не надо мудрить очереди всякие
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.