Всем привет.
Ситуация такая:
есть 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" на странице?
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 только так и построен
Вот это уже AJAX "по-взрослому". Спасибо
а ваш мобильный портал используется клиентами через:
- специальное гибридное приложение;
- или заходят в него через браузер;
- или заходят в него через 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 обращений...
[quote]Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.[/quote] Странно. Если исчезла, значит какое-то событие произошло. Просто так бы не исчезло. Попробуй повесить дебагер на onComplete и посмотри отрабатывает ли он. Возможно туда передаются какие-то ошибки.
так было когда была очень плохая связь.
при реальном полном отключении связи в десктопе в браузере:
- без выставленного атрибута тайм аут гифка крутится бесконечно.
в SF1 в iOS - крутится 1 сек. но это при отключенном пользователем Вай-Фай, при реальной потере связи - не знаю как будет.
прогулялся - проверил:
в SF1 в iOS при выходе из зоны приема устройство сообщает об прекращении связи, и гифка крутится долю секунды.
в зоне крайне слабой связи - гифкка крутится около 1 мин - затем устройство сообщает об прекращении связи и гифка останавливается.
в зоне крайне слабой связи - если пока крутится гифка вернутся в зону более устойчивой вай-фай связи то AJAX проходит.
вроде, все так и должно было быть.
[quote="Dmitry Shnyrev"][quote]Но вот пропала связь. Гифка покрутилась-покрутилась, и примерно через 30 сек исчезла, при этом на экране все осталось как было.[/quote] Странно. Если исчезла, значит какое-то событие произошло. Просто так бы не исчезло. Попробуй повесить дебагер на onComplete и посмотри отрабатывает ли он. Возможно туда передаются какие-то ошибки.[/quote] так было когда была очень плохая связь. при реальном полном отключении связи в десктопе в браузере: - без выставленного атрибута тайм аут гифка крутится бесконечно. в SF1 в iOS - крутится 1 сек. но это при отключенном пользователем Вай-Фай, при реальной потере связи - не знаю как будет. прогулялся - проверил: в SF1 в iOS при выходе из зоны приема устройство сообщает об прекращении связи, и гифка крутится долю секунды. в зоне крайне слабой связи - гифкка крутится около 1 мин - затем устройство сообщает об прекращении связи и гифка останавливается. в зоне крайне слабой связи - если пока крутится гифка вернутся в зону более устойчивой вай-фай связи то AJAX проходит. вроде, все так и должно было быть.
а ваш мобильный портал используется клиентами через:- специальное гибридное приложение;
- или заходят в него через браузер;
- или заходят в него через 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обственно и всё.