Лечим JavaScript-зависимость
Или Server-Side Rendering для самых маленьких
Любовь к AJAX бывает чрезмерной и в погоне за Web2.0 (3.0, 4.0, … — желаемое подчеркнуть) мы создаём сайты, в которых все наши действия бегут через XMLHTTPRequest. Нет, это, конечно, неплохо — снижаем нагрузку на сервер, канал и т.д. и т.п., но есть одно «но» — у нас есть поисковые машины, которые не всегда озадачивают себя выполнением JavaScript-кода, а контент, спрятанный за AJAX-запросом, им отдать всё-таки нужно. Следовательно, у нас возникает необходимость дублирования навигации (это как минимум) для клиентов без JavaScript.
Стоит помнить, что есть ещё пользователи, у которых JavaScript отключён в браузере (или даже не поддерживается; привет тебе, «Linx»), но эти знают, что делают. А ещё есть скрипты, которые ломаются и не дают обычным пользователям воспользоваться навигацией по сайту, что пользователей очень сильно расстраивает, так что эта глава не «просто так».
Как же всё это обойти и на грабли не наступить? Да всё очень просто — создавайте обычную навигацию, которую вы бы делали, не слышав ни разу об AJAX и компании:
Данный пример работает у нас без JavaScript, все страницы в нашем меню используют один и тот же шаблон для вывода информации, и по факту у нас изменяется лишь содержимое элемента с id="content"
. Теперь приступим к загрузке контента посредством AJAX – для этого добавим следующий код:
В данном примере мы предполагаем, что сервер, видя параметр ajax=true
вернет нам не полностью всю страницу, а лишь обновление для искомого элемента с id="content"
.
Конечно, сервер должен быть умнее и не требовать явного указания для использования AJAX, а должен вполне удовлетвориться, словив header «
X_REQUESTED_WITH
» со значением «XMLHttpRequest
». Большинство современных фреймворков для web-разработки с этим справляются «из коробки».
Если же управлять поведением сервера проблематично и он упёрто отправляет нам всю страницу целиком, то можно написать следующий код:
Если в подгружаемом содержимом также есть ссылки, то вы уже сможете «оживить» события:
Last updated