Уведомление пользователя после долгой задачи Ajax, когда он может находиться на другой странице - PullRequest
1 голос
/ 29 января 2009

У меня есть запрос Ajax к веб-сервису, который обычно занимает 30-60 секунд. В некоторых случаях это может занять несколько минут. В течение этого времени пользователь может продолжить работу над другими задачами, что означает, что они, вероятно, будут на другой странице после завершения задачи.

Есть ли способ узнать, что исходный запрос был выполнен? Единственное, что приходит на ум, это:

  • обернуть веб-сервис моей собственной веб-службой
  • используйте мой веб-сервис, чтобы установить флаг где-нибудь
  • проверить этот флаг в последующих запросах страницы

Есть ли лучшие способы сделать это? Я использую jQuery и ASP.Net, если это имеет значение.

Ответы [ 5 ]

2 голосов
/ 29 января 2009

Вы можете добавить другой метод к вашему веб-сервису, который позволяет вам проверять статус предыдущего запроса. Затем вы можете использовать ajax для опроса веб-службы каждые 30 секунд или около того. Вы можете сохранить идентификатор запроса или что-то еще в Session, чтобы ваш ajax-вызов знал, какой идентификатор запроса нужно опрашивать независимо от того, на какой странице вы находитесь.

1 голос
/ 29 января 2009

Сначала отправьте запрос немедленно, например, «Начата обработка ...». Затем используйте другой запрос для опроса результата. Не хорошо ни для сервера, ни для браузера клиента иметь длинные открытые сеансы HTTP. Кроме того, пользователь должен быть проинформирован и проинформирован о том, что он запускает запрос, выполнение которого может занять некоторое время.

Для отображения результата у вас может быть «область уведомлений» на всех ваших веб-страницах. В качестве альтернативы у вас может быть выделенная страница для этого и указание пользователю перейти туда. Как и предполагали другие, вы можете использовать опрос, чтобы получить результат.

1 голос
/ 29 января 2009

Я бы сказал, что вам придется время от времени опрашивать, чтобы увидеть, закончился ли запрос, и показывать некоторые уведомления, как, например, на этом сайте, например, со значками.

0 голосов
/ 29 января 2009

Поскольку веб-разработка не имеет состояния (вы не можете установить триггер / событие на сервере для обновления клиента), жизнеспособной стратегией является настройка функции состояния, которую вы можете периодически вызывать с помощью таймера JavaScript, чтобы проверить код завершил выполнение. Когда он закончится, вы можете обновить свой вид.

0 голосов
/ 29 января 2009

Вы можете использовать фреймы на своем сайте и выполнять все ваши длинные AJAX-запросы в невидимом фрейме. Рамки добавляют определенный уровень боли развитию, но могут быть решением ваших проблем.

Единственный другой способ сделать это - загрузить другие страницы с помощью запроса AJAX, чтобы не происходило перезагрузок страниц real - это означает, что запросы AJAX прервано, но может вызвать проблемы с нарушением функциональности браузера (назад / вперед, закладок и т. д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...