Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax сайт с поддержкой no javascript 
:(
    Опции темы
Logo
Дата 25.5.2012, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Посмотрел некоторые Java фреймворки, понравился демо сайт полностью на ajax (Google Web Toolkit) http://3d-port.com/
Однако тут есть существенный минус - с отключенным JavaScript не работает. Существуют ли фреймворки, позволяющие сделать ajax сайт, работающий также и при отключенном JavaScript?

PM MAIL   Вверх
Stolzen
Дата 25.5.2012, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Нет. Знаете как AJAX расшифровывается?


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Logo
Дата 25.5.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



В курсе. Но теоретически не вижу препятствий к тому, что бы использовать одинаковый шаблонизатор на сервере и клиенте, и в случае отсутствия javascript генерировать то же самое на сервере.
PM MAIL   Вверх
Nofate
Дата 25.5.2012, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 2
Всего: 8



А данные то вы как будете асинхронно гонять без JS?


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Logo
Дата 26.5.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата(Nofate @ 25.5.2012,  23:35)
А данные то вы как будете асинхронно гонять без JS?

Очевидно же, если js нет, то синхронно, через http и html.
PM MAIL   Вверх
Samotnik
Дата 28.5.2012, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Цитата(Logo @  26.5.2012,  14:27 Найти цитируемый пост)
Очевидно же, если js нет, то синхронно, через http и html. 

 smile 
а как можно на html послать HTTP запрос? Поделись плиз.
PM MAIL   Вверх
Vasay
Дата 29.5.2012, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Logo
ИМХО 

AJAX для сайтов можно применять только в очень маленьких количествах и очень осторожно. 

В свое время я писал такой пост: 
http://forum.vingrad.ru/forum/topic-285228...y2056408/0.html  

Пост старый и уже не все ссылки на примеры там работают.  


Насчет "сделать Ajax сайт, который работал бы и без JS (точнее имел бы вторую версию, работающую без JS)":
Теоретически можно. Но готовых фреймворков я не встречал. Да и над реализацией нужно будет попотеть. 
Какая тут сложность? - должно быть соответствие URL контенту: т.е. в AJAX версии при изменении содержимого какого-нибудь элемента должен меняться URL. И должна существовать другая версия сайта, без использования JS, которая по данному URL выдавала бы соответствующий контент.  

Это сообщение отредактировал(а) Vasay - 29.5.2012, 11:28


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Logo
Дата 5.6.2012, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата

Какая тут сложность? - должно быть соответствие URL контенту: т.е. в AJAX версии при изменении содержимого какого-нибудь элемента должен меняться URL. И должна существовать другая версия сайта, без использования JS, которая по данному URL выдавала бы соответствующий контент.  

Да, есть такое дело...

Мне кажется это можно было бы реализовать таким концептом
  •  Серверный шаблонизатор, как и клиентский на JavaScript(V8), DOM tree based шаблонизатор, вроде PURE
  •  Сайт состоит из набора виджетов, каждый объект виджета может иметь поля layout, содержащие массив дочерних виджетов. Начинается дерево виджетов с корневого виджета, который допустим имеет поля вывода leftColumn, rightColumn, content. Также это дерево в JSON содержит класс виджета и параметры его конструктора (например id статьи, для виджета отображающего содержание статьи)
  •   При обращении к определенному url генерируется дерево виджетов (содержащее для каждого виджета его класс, параметры конструктора, и дочерние виджеты). Если это первое обращение к этому url (или no JavaScript) то по этому дереву вызываются конструкторы виджетов, которые извлекают данные (часть класса виджета, отвечающая за Controller), и на основе шаблонизатора класса виджета генерируют html.
    Если обращение к url'у идет из javascript (со специальным параметром), то на сервер отправляется дерево виджетов, описывющее их состояние. Сервер также генерирует дерево виджетов для этого url'а, и сравнивает его с переданным из JS деревом. Виджеты, оставшиеся без изменения, удаляются из дерева, те виджеты, которых не должно быть на этой странице, помечаются для удаления, diff дерева получается. Затем по дереву генерируются новые виджеты, но их данные передаются не в шаблонизатор, а отправляются в дереве на клиент.
    Так же JS передает классы виджетов, шаблоны для которых уже загружены, и если новые виджеты на этом url'е принадлежат новым классам, то в ответе так же передается шаблон (и js код, если нужен), для новых виджетов.
    Используя шаблоны и данные js генерирует новые виджеты без обновления страницы.
  •  Так же объект виджета может иметь параметры конструктора, не передающиеся на сервер. Например параметры, обозначающие открытие/закрытие пункта меню

PM MAIL   Вверх
Vasay
Дата 5.6.2012, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Цитата(Logo @  5.6.2012,  20:36 Найти цитируемый пост)
 При обращении к определенному url генерируется дерево виджетов (содержащее для каждого виджета его класс, параметры конструктора, и дочерние виджеты). Если это первое обращение к этому url (или no JavaScript) то по этому дереву вызываются конструкторы виджетов, которые извлекают данные (часть класса виджета, отвечающая за Controller), и на основе шаблонизатора класса виджета генерируют html.Если обращение к url'у идет из javascript (со специальным параметром), то на сервер отправляется дерево виджетов, описывющее их состояние. Сервер также генерирует дерево виджетов для этого url'а, и сравнивает его с переданным из JS деревом. Виджеты, оставшиеся без изменения, удаляются из дерева, те виджеты, которых не должно быть на этой странице, помечаются для удаления, diff дерева получается. Затем по дереву генерируются новые виджеты, но их данные передаются не в шаблонизатор, а отправляются в дереве на клиент.Так же JS передает классы виджетов, шаблоны для которых уже загружены, и если новые виджеты на этом url'е принадлежат новым классам, то в ответе так же передается шаблон (и js код, если нужен), для новых виджетов.Используя шаблоны и данные js генерирует новые виджеты без обновления страницы.



Может я не правильно Вас понял, но мне показалось, что в Вашем варианте все как-то сложно. Зачем, например, отправлять на сервер дерево состояний виджетов?

ИМХО, можно сделать проще:

есть страница состоящая из виджетов. Каждый виджет имеет состояние. Состояние всех виджетов закодировано в URL страницы.

Допустим, у нас есть выиджет, со списком товаров. Показывается 10 товаров. Есть кнопка "показать следующие 10". 

При ее нажатии, при наличии js, срабатывает событие "он клик", запускается скрипт обработки, происходит обращение к некоему сервису на нашем сайте, который должен выдать следующие 10 товаров (общение может происходить, например c помощью json). После обновления товаров в виджете скрипт меняет в URL соответствующий параметр, отвечающий за состояние конкретного виджета, блокирует переход по ссылке  и меняет "href" кнопки  "показать следующие 10" для того что бы она вела уже на следующие 10 товаров.

Если js нет или обращение первое, то происходит переход  ссылке кнопки "показать следующие 10". На нашем сайте запускается некий конструктор страницы, который по состоянию виджетов (переданному в URL ссылки) создает страницу со всеми виджетами.  


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
IDVsbruck
Дата 6.6.2012, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: нет
Всего: 22



Цитата(Logo @  25.5.2012,  20:47 Найти цитируемый пост)
Однако тут есть существенный минус - с отключенным JavaScript не работает. Существуют ли фреймворки, позволяющие сделать ajax сайт, работающий также и при отключенном JavaScript? 

Забей!
Мало того, что процент НЕиспользования js на клиентских машинах пренебрежительно мал, так еще они попадают под корпоративный сегмент, который в подпвляющем количестве неинтересен сайту.
Судя по акцентам, как мне показалось, речь может идти о мобильной платформе - смартфонах и телефонах, где зачастую или js отключен, или его нет, или серьезные ограничения. Есть такое дело. Но тут настолько разношерстная компания, что делать универсальный сайт "для всего" - это гораздо затратнее и хуже, чем делать под десктоп и мобильную платформу раздельно. Для мобилок при запросе смотрим заголовки и "подсовываем" другую страницу. Либо при первом входе определяем модель, и в зависимости от нее не только можем "дать" клиенту сайтик под его разрешение, но и проинспектировать свойства и дать выбор - показывать ему обычный сайт или мобильный; понятно, при обычном риска по поводу js он берет на себя.
PM MAIL   Вверх
Vasay
Дата 6.6.2012, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Цитата(IDVsbruck @  6.6.2012,  15:28 Найти цитируемый пост)
Забей!
Мало того, что процент НЕиспользования js на клиентских машинах пренебрежительно мал, так еще они попадают под корпоративный сегмент, который в подпвляющем количестве неинтересен сайту.


Гугль Бот тоже не интересен сайту? 




--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Logo
Дата 6.6.2012, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата

ИМХО, можно сделать проще:

есть страница состоящая из виджетов. Каждый виджет имеет состояние. Состояние всех виджетов закодировано в URL страницы.

Хранить состояние ВСЕХ виджетов в url проблематично, url будет длинный и не ЧПУ.

Цитата

 Зачем, например, отправлять на сервер дерево состояний виджетов?


При навигации по страницам редко когда обновляется весь контент полностью. Обычно меняются центральные виджеты, иногда виджеты в правой/левой колонке. Что бы знать, что изменилось, серверу нужно знать, что было на предыдущей странице.

Цитата

Допустим, у нас есть выиджет, со списком товаров. Показывается 10 товаров. Есть кнопка "показать следующие 10". 

Именно в данном конкретном случае я бы вообще сделал для no javascript обычный пейджер. Поисковику будет странно видеть кучу похожих страниц, причем страница при будет постепенно разрастается, нагружая как загрузку страницы (размер), так и выборку из БД.

Цитата

Может я не правильно Вас понял, но мне показалось, что в Вашем варианте все как-то сложно.

Да, создание фреймворка с такой структурой весьма сложно. Использование же, как мне кажется, не должно быть сильно сложнее обычных action-based фреймворков.
PM MAIL   Вверх
Vasay
Дата 6.6.2012, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Цитата(Logo @  6.6.2012,  21:56 Найти цитируемый пост)
Хранить состояние ВСЕХ виджетов в url проблематично, url будет длинный и не ЧПУ.


Я думаю, при использовании Ajax а ЧПУ придется забыть.


Цитата(Logo @  6.6.2012,  21:56 Найти цитируемый пост)
При навигации по страницам редко когда обновляется весь контент полностью. Обычно меняются центральные виджеты, иногда виджеты в правой/левой колонке. Что бы знать, что изменилось, серверу нужно знать, что было на предыдущей странице.


Так надо отправить только запрос на новую информацию для изменяемого виджета.


Цитата(Logo @  6.6.2012,  21:56 Найти цитируемый пост)
Именно в данном конкретном случае я бы вообще сделал для no javascript обычный пейджер. Поисковику будет странно видеть кучу похожих страниц, причем страница при будет постепенно разрастается, нагружая как загрузку страницы (размер), так и выборку из БД.


Так для версии "no JS" и получается обычный пэйджинг, а для версии с JS - динамическое обновление товаров на странице, без перезагрузки страницы. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Logo
Дата 7.6.2012, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата

Так надо отправить только запрос на новую информацию для изменяемого виджета.

А как знать, какие виджеты будут на следующей странице?

Цитата

Так для версии "no JS" и получается обычный пэйджинг, а для версии с JS - динамическое обновление товаров на странице, без перезагрузки страницы.  

Мне показалось, что имеется ввиду постоянное увеличение размера страницы, добавляя нужное количество новостей, в зависимости от url. Да, обычный пейджер, с номерами страниц, и ссылками на первую и последнюю страницу. 

Цитата

Я думаю, при использовании Ajax а ЧПУ придется забыть.

Ну почему, если сделать как следует, то можно. Тот же twitter тому пример. 
PM MAIL   Вверх
Vasay
Дата 7.6.2012, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Цитата(Logo @  7.6.2012,  00:18 Найти цитируемый пост)
А как знать, какие виджеты будут на следующей странице?


Так страница не меняется. Меняется содержимое одного виджета.


Цитата(Logo @  7.6.2012,  00:18 Найти цитируемый пост)
Ну почему, если сделать как следует, то можно. Тот же twitter тому пример. 

В простом частном случае, можно сделать.  В случае если мы хотим создать универсальную систему с набором виджетов - то придется хранить состояние всех виджетов в URL, при этом о ЧПУ придется забыть. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0898 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.