Регистрация  |  Вход

Как обработать time-out у Ajax action?

Всем привет.

Ситуация такая:

есть apex:commandButton и apex:actionFunction, которые вызывают какой-то action и Ajax перерисовку какой-то apex:outputPanel. Пока работает Ajax в apex:actionStatus крититься гифка.

Все нормально.

Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.

Но как сделать сообщение пользователю, что "что-то пошло не так", вероятно проблемы со связью, попробуйте еще раз?

я вижу атрибут timeout на commandButton, но как я понял - это время в сек пока крутиться гифка. Но как вызвать какое-то действие, JS функцию, которая и выкинет сообщение пользователю?

Спасибо

Всем привет.

Ситуация такая:

есть apex:commandButton и apex:actionFunction, которые вызывают какой-то action и Ajax перерисовку какой-то apex:outputPanel. Пока работает Ajax в apex:actionStatus крититься гифка.

Все нормально.

Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.

Но как сделать сообщение пользователю, что "что-то пошло не так", вероятно проблемы со связью, попробуйте еще раз?

я вижу атрибут timeout на commandButton, но как я понял - это время в сек пока крутиться гифка. Но как вызвать какое-то действие, JS функцию, которая и выкинет сообщение пользователю?

Спасибо

Во вселееной есть различные параллели между девелоперами.Чесно я бы тебе посоветовал попробвывать поюзать асtion poller.Я думаю это стандартная проблемы и по идеи должно быть стандартное решение.Если не найдешь предлаюгаю использовать моё решение то есть, У Нас была проблема получали авторізацію еррор на action commandbutton и не могли отловить в чем дело но потом придумал испльзовать remote action и если что то шло не так пока плавала картинка возращали сообщение что получили сбой.Не достаток в том что метод статичный и предовать все данные со стараницы придется либо json или js object.вот такая идея.

Во вселееной есть различные параллели между девелоперами.Чесно я бы тебе посоветовал попробвывать поюзать асtion poller.Я думаю это стандартная проблемы и по идеи должно быть стандартное решение.Если не найдешь предлаюгаю использовать моё решение то есть, У Нас была проблема получали авторізацію еррор на action commandbutton и не могли отловить в чем дело но потом придумал испльзовать remote action и если что то шло не так пока плавала картинка возращали сообщение что получили сбой.Не достаток в том что метод статичный и предовать все данные со стараницы придется либо json или js object.вот такая идея.

странно что нет стандартного решения.

я ожидал что в apex:actionStatus будет вариант действий на случай тайм-аута.

Не совсем понял вариант, предложенный Сергеем. Смысл в том, чтобы делать повторные обращения к серверу, чтобу убедится, что первое AJAX обращение прошло?
А если вообще связь пропала - актуально для мобильных девайсов.

У меня как вариант в голове: на apex:commandButton onclick ставим JS функцию, которая условно выбрасывает сообщение о плохой связи через 30 сек. На apex:commandButton oncomplete ставим другую функцию, которая просто меняет значение на переменной-условии первой функции. Т.е. первая функция в любом случае срабатывает через 30 сек, но если был oncomplete - то сообщение не показывает.
Но есть нюансы - вроде того, что если пользователь несколькораз нажмет на Кнопкую. Попробую сегодня, посмотрим что будет.

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

А в SF1 проблем меньше. При пропавшей связи только секунду крутится гифка и ничего не происходит - что само по себе будет сигналом для пользователя - что что-то пошло не так. Но правда это был обрыв связи при помощи отключенного вай-фай, в реальности гифка наверное будет крутится дольше. Главное - чтобы из кеша не стал грузить. хотя кажется именно для этого нужен cache="false" на странице?

странно что нет стандартного решения.

я ожидал что в apex:actionStatus будет вариант действий на случай тайм-аута.

Не совсем понял вариант, предложенный Сергеем. Смысл в том, чтобы делать повторные обращения к серверу, чтобу убедится, что первое AJAX обращение прошло? 
А если вообще связь пропала - актуально для мобильных девайсов.

У меня как вариант в голове: на apex:commandButton onclick ставим JS функцию, которая условно выбрасывает сообщение о плохой связи через 30 сек. На apex:commandButton oncomplete ставим другую функцию, которая просто меняет значение на переменной-условии первой функции. Т.е. первая функция в любом случае срабатывает через 30 сек, но если был oncomplete - то сообщение не показывает.
Но есть нюансы - вроде того, что если пользователь несколькораз нажмет на Кнопкую. Попробую сегодня, посмотрим что будет.

[b]Попробовал: не получилось. [/b]При пропавшей связи:
в браузере:
- без тайм аута гифка крутится бесконечно.
- oncomplete случается каждый раз когда повторно жмешь кнопку, а гифка еще крутится
- с какого то моммента брузер начинает грузить ответ из кеша.

А в SF1 проблем меньше. При пропавшей связи только секунду крутится гифка и ничего не происходит - что само по себе будет сигналом для пользователя - что что-то пошло не так. Но правда это был обрыв связи  при помощи отключенного вай-фай, в реальности гифка наверное будет крутится дольше. Главное - чтобы из кеша не стал грузить. хотя кажется именно для этого нужен cache="false" на странице?

Den Brown
странно что нет стандартного решения.

я ожидал что в apex:actionStatus будет вариант действий на случай тайм-аута.

Не совсем понял вариант, предложенный Сергеем. Смысл в том, чтобы делать повторные обращения к серверу, чтобу убедится, что первое AJAX обращение прошло?
А если вообще связь пропала - актуально для мобильных девайсов.

https://www.salesforce.com/us/developer/docs/pages/Content/pages_js_remoting.htm

http://forceadventure.wordpress.com/2013/07/15/javascript-remoting-a-primer/

Почитай это идея в том что у тебя есть фунция сallback в Javascript которая возращает состояние,насчет разрыва связи неуверен.Но думаю обязательно сработает наш Mobile Portal только так и построен

[quote="Den Brown"]странно что нет стандартного решения.

я ожидал что в apex:actionStatus будет вариант действий на случай тайм-аута.

Не совсем понял вариант, предложенный Сергеем. Смысл в том, чтобы делать повторные обращения к серверу, чтобу убедится, что первое AJAX обращение прошло? 
А если вообще связь пропала - актуально для мобильных девайсов.
[/quote]

[url]https://www.salesforce.com/us/developer/docs/pages/Content/pages_js_remoting.htm[/url]

[url]http://forceadventure.wordpress.com/2013/07/15/javascript-remoting-a-primer/[/url]

Почитай это идея в том что у тебя есть фунция сallback в Javascript которая возращает состояние,насчет разрыва связи неуверен.Но думаю обязательно сработает наш Mobile Portal только так и построен

Sergey Prichepo
https://www.salesforce.com/us/developer/docs/pages/Content/pages_js_remoting.htm

Вот это уже AJAX "по-взрослому". Спасибо


Sergey Prichepo
наш Mobile Portal только так и построен

а ваш мобильный портал используется клиентами через:

- специальное гибридное приложение;
- или заходят в него через браузер;
- или заходят в него через SF1;

нативые приложения для соединения с SF server используют REST API.
и мне казалось, что гибридные приложения работают также.
и теперь приходит понимание, что гибридные и HTML5 приложения используют имеено AJAX, т.е. всегда (или большую часть времени) пользователь находится на одной и той же странице, и постоянно идет AJAX коммуникация с сервером, и при этом это не какие-то действия с помощью SF AJAX API, а использование методов контроллера этой страницы с помощью AJAX обращений...

[quote="Sergey Prichepo"]

[url]https://www.salesforce.com/us/developer/docs/pages/Content/pages_js_remoting.htm[/url]

[/quote]

Вот это уже AJAX "по-взрослому". Спасибо


[quote="Sergey Prichepo"]
наш Mobile Portal только так и построен
[/quote]

а ваш мобильный портал используется клиентами через:

- специальное гибридное приложение;
- или заходят в него через браузер;
- или заходят в него через SF1;

нативые приложения для соединения с SF server используют REST API.
и мне казалось, что гибридные приложения работают также.
и теперь приходит понимание, что гибридные и HTML5 приложения используют имеено AJAX, т.е. всегда (или большую часть времени) пользователь находится на одной и той же странице, и постоянно идет AJAX коммуникация с сервером, и при этом это не какие-то действия с помощью SF AJAX API, а использование методов контроллера этой страницы с помощью AJAX обращений...

Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.

Странно. Если исчезла, значит какое-то событие произошло. Просто так бы не исчезло. Попробуй повесить дебагер на onComplete и посмотри отрабатывает ли он. Возможно туда передаются какие-то ошибки.

[quote]Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.[/quote]
Странно. Если исчезла, значит какое-то событие произошло. Просто так бы не исчезло. Попробуй повесить дебагер на onComplete и посмотри отрабатывает ли он. Возможно туда передаются какие-то ошибки.

Dmitry Shnyrev
Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.

Странно. Если исчезла, значит какое-то событие произошло. Просто так бы не исчезло. Попробуй повесить дебагер на onComplete и посмотри отрабатывает ли он. Возможно туда передаются какие-то ошибки.

так было когда была очень плохая связь.

при реальном полном отключении связи в десктопе в браузере:
- без выставленного атрибута тайм аут гифка крутится бесконечно.

в SF1 в iOS - крутится 1 сек. но это при отключенном пользователем Вай-Фай, при реальной потере связи - не знаю как будет.

прогулялся - проверил:
в SF1 в iOS при выходе из зоны приема устройство сообщает об прекращении связи, и гифка крутится долю секунды.

в зоне крайне слабой связи - гифкка крутится около 1 мин - затем устройство сообщает об прекращении связи и гифка останавливается.

в зоне крайне слабой связи - если пока крутится гифка вернутся в зону более устойчивой вай-фай связи то AJAX проходит.

вроде, все так и должно было быть.

[quote="Dmitry Shnyrev"][quote]Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.[/quote]
Странно. Если исчезла, значит какое-то событие произошло. Просто так бы не исчезло. Попробуй повесить дебагер на onComplete и посмотри отрабатывает ли он. Возможно туда передаются какие-то ошибки.[/quote]

так было когда была очень плохая связь.

при реальном полном отключении связи в десктопе в браузере:
- без выставленного атрибута тайм аут гифка крутится бесконечно.

в SF1 в iOS - крутится 1 сек. но это при отключенном пользователем Вай-Фай, при реальной потере связи - не знаю как будет.

прогулялся - проверил:
в SF1 в iOS при выходе из зоны приема устройство сообщает об прекращении связи, и гифка крутится долю секунды.

в зоне крайне слабой связи - гифкка крутится около 1 мин - затем устройство сообщает об прекращении связи и гифка останавливается.

в зоне крайне слабой связи - если пока крутится гифка вернутся в зону более устойчивой вай-фай связи то AJAX проходит.

вроде, все так и должно было быть.

Den Brown
а ваш мобильный портал используется клиентами через:

- специальное гибридное приложение;
- или заходят в него через браузер;
- или заходят в него через SF1;

Наше приложение используется через стандарт site есть страница в ней несколько соmponentvisual тов куча Javascript типо backdone, jquery.mobile и каждый компонет вызывается хитрым образом через id.в контроллре несколько методов remote action. контроллеры все на remote action.cобственно и всё.

[quote="Den Brown"]

а ваш мобильный портал используется клиентами через:

- специальное гибридное приложение;
- или заходят в него через браузер;
- или заходят в него через SF1;

[/quote]

Наше приложение используется через стандарт site есть страница в ней несколько соmponentvisual тов куча Javascript типо backdone, jquery.mobile и каждый компонет вызывается хитрым образом через id.в контроллре несколько методов remote action. контроллеры все на remote action.cобственно и всё.