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-запрос выполняться при перезагрузке страницы?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
maxegorov
Отправлено: 22 Января, 2015 - 19:27:47
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Здравствуйте.

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

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

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

Спасибо.
 
 Top
SAD
Отправлено: 22 Января, 2015 - 19:34:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




А если произойдет ошибка с предыдущим? Пусть ждут. Либо нужно логику конкретно менять
 
 Top
maxegorov
Отправлено: 22 Января, 2015 - 19:38:07
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




SAD пишет:
А если произойдет ошибка с предыдущим? Пусть ждут. Либо нужно логику конкретно менять


Простите, забыл указать. Документы с ошибками специальным образом помечаются, их потом обрабатывают повторно. Это очень редкий случай, и нет смысла ждать при каждом запросе 5-6 секунд ради возможного сообщения об ошибке.
 
 Top
Мелкий Супермодератор
Отправлено: 22 Января, 2015 - 20:30:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Комплексное решение правильное:
После обработки заносить документ в очередь на обработку и сразу возвращать управление пользовательскому интерфейсу.
Фоновый процессом разгребать очередь. В этом случае уже не имеет значения, сколько времени выполняется задача - отзывчивости интерфейса это не мешает.


-----
PostgreSQL DBA
 
 Top
3d_killer
Отправлено: 22 Января, 2015 - 21:39:06
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Мелкий, и где эта очередь должна будет висеть?
 
My status
 Top
SAD
Отправлено: 22 Января, 2015 - 23:09:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Можно писать задания на обработку в базу. потом кроном запускать скрипт, который будет их обрабатывать
 
 Top
Мелкий Супермодератор
Отправлено: 23 Января, 2015 - 08:27:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




3d_killer пишет:
и где эта очередь должна будет висеть?

От сервера очередей до статуса "в очереди" в БД.


-----
PostgreSQL DBA
 
 Top
nerv
Отправлено: 24 Января, 2015 - 10:28:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




Можно страницу не перезагружать

1. поставили обработчик ожидания ответа на аякс (success/error)
2. отправили форму
3. сделали ресет текущей форме (очистили все поля) пользователь начал работать с новой формой
4. в случае, если ранее отправленная форма невалидна или запрос завершился с ошибкой, можно сообщить об этом пользователю

Проще всего реализовать через ООП, где есть
1. класс Отчета (или что они там у тебя заполняют), который может делать getState()/setState()
2. Очередь состояний. Можно завести StateManager (смотри по обстоятельствам)
3. класс App, который взаимодействует с отчетом, менеджером состояний, отправляет состояния(?)

Т.о. в рамках одной страницы ты сможешь делать задуманное + править неверные формы


-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
3d_killer
Отправлено: 24 Января, 2015 - 20:42:52
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




я думаю если используешь AJAX, так и подгружай следующие данные так же, зачем перезагружать, пока будут обрабатывать эти данные придет ответ и не надо мудрить очереди всякие
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB