Обсуждение предыдущей статьи было бурным. Самые ярые любители jQuery, Mootools кричали зачем мол нужен другой велосипед.
В данной статье мы рассмотрим использование техники Fly AJAX. Это одна из нескольких функциональных возможностей, которые не реализованы в ранее указанных больших (и мною уважаемых) фреймворках. Также, в данной статье, мы рассмотрим принципы правильного проектирования и построения сайтов для хорошей индексации с применением AJAX технологии.

«Улётный» AJAX


Технология Fly AJAX — это преобразование «на лету» обычных ссылок в AJAX ссылки. Используя данную технологию, обычную загрузку контента по ссылкам на веб-страницы мы можем легко преобразовать в асинхронную загрузку.

Рассмотрим на примере. Допустим у нас имеется меню сайта

<ul>
  <li><a href="/content/info">Info</a></li>
  <li><a href="/content/download">Download</a></li>
  <li><a href="/content/contact">Contact</a></li>
</ul>
<div id="content-body">Welcome</div>


При обычном подходе, кликая на ссылки меню, мы переходим от одной страницы к другой с полной перезагрузкой.
Применим к данному меню технику Fly AJAX. Одним из вариантов автоматического преобразования обычных ссылок в AJAX ссылки, является использование SRAX.Filter.
SRAX.Filter — как раз и предназначен для «авто-заворачивания», «авто-преобразования» обычных ссылок в AJAX ссылки. Ссылки по заданным критериям отфильтровываются и преобразуются в асинхронные запросы. Рассмотрим пример относительно нашего меню

SRAX.Filter.add({url:'/content/', id:'content-body'})

Все! Теперь кликая на ссылки меню мы переходим от одной страницы к другой асинхронно подгружая контент без полной перезагрузки страниц.

id — определяет ИД элемента, в который необходимо подгрузить контент.
url — определяет часть адреса ссылки, условие фильтрации, по которому проводить отбор ссылок для преобразования.

Список параметров работы SRAX.Filter

  • id — id блока
  • url — ссылка или массив ссылок
  • urlType — 'contain' (по умолчанию) или 'start' или 'end' — соответсвенно содержит, начинается или заканчивается
  • query — строка или массив строк запроса
  • queryType — 'contain' (по умолчанию) или 'start' или 'end' — соответсвенно содержит, начинается или заканчивается
  • join (joinLogic) — логика обьединения url и query — 'or' (по умолчанию) или 'and'
  • changer (urlChanger) — функция изменения обволакиваемой ссылки urlChanger: function(url, owner){return url.replace('index.php', 'mypage.php')}
  • target — true заворачивать ссылки с атрибутом target (_self, _parent, _top, _blank) или false — не заворачивать (по умолчанию)
  • type — если = 'skip', тогда отмена «AJAX заворачивания»; если = 'data', тогда для запроса используется dax, иначе используется hax
  • handler — функция обработки клика, если не указана, тогда используется функция в соответсвии с type
  • + все опции из hax (все опции, которые описывались в предыдущей статье для функции hax)

Важно: адреса следующего типа /content/download?id=1 — для фильтра делятся на две части url=/content/download и query=id=1. Фильтрацию можно проводить по параметрам запроса

SRAX.Filter.add({query:'id=', id:'main-content'})

Также, можно проводить комбинацию условий фильтрации url и query, условие комбинации определяется параметром join.

На нашем сайте имеются примеры разных вариантов фильтрации.

Рекомендую самостоятельно ознакомится с примерами которые используют параметры handler и changer.

Использование ax: атрибутов тегов <a>,<form>,<area>


Вторым способом реализации Fly AJAX является использование ax атрибутов ссылок <a>. Данный подход очень понравился многим разработчикам, которые использую Fullajax в своих проектах. Рассмотрим пример на том же мен��
<ul>
  <li><a ax:id="content-body" href="/content/info">Info</a></li>
  <li><a ax:id="content-body" href="/content/download">Download</a></li>
  <li><a ax:id="content-body" href="/content/contact">Contact</a></li>
</ul>
<div id="content-body">Welcome</div>

Все! Опять же, кликая на ссылки меню мы переходим от одной страницы к другой асинхронно подгружая контент без полной перезагрузки страниц.

Подход не стандартный, но оригинальный, так как практически не требует написания ни единой строчки javascript кода. В качестве атрибутов вы можете использовать точно такие же параметры как и для SRAX.Filter, только с префиксом ax: (название префикса по желанию можно настроить).

Одним из сложных моментов при реализации Fly AJAX являлось сохранение функциональности определенных для ссылок событий, т.е. если вы определили событие onclick

<a ax:id='content' href="/mypage" onclick="alert(1)">

произойдет сначала alert, а потом загрузка. Если выполнение onclick вернет false — AJAX запрос не состоится.

Авто-преобразованию подвергаются также теги <form> и <area>.

При желании можно организовать более оптимальную выдачу контента для AJAX запросов. Т.е. отдавать только то, чт�� необходимо заменить на стороне клиента. Определить обычный запрос или AJAX запрос можно проверяя хеадер запроса X-Requested-With=XMLHttpRequest. При наличии такового отдавать меньше. Если нет желания оптимизировать выдачу или нет такой возможности — можно использовать тогда метки блоков контента. Детальнее о данном подходе отдачи контента, который условно называется model2 («один-ко-многим» — один запрос на много блоков), можно ознакомится в отдельном топике на сайте нашего форума. Данный подход детальнее будет рассмотрен в следующих статьях.

AJAX и индексация поисковиками


Исходя из ранее рассмотренного можно легко понять как необходимо строить свои сайты для того чтобы и контент индексировался поисковиками и AJAX работал. Ведь если мы посмотрим на структуру нашего меню, которое приведено в примерах — оно чудесно поддается индексации. А если еще хорошо подумать, то в итоге можно сделать даже большую степень индексации чем при обычном построении. При правильном использовании AJAX позволяет повысить индексацию сайтов!!! Ваууу! И полетели шапки…

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


В следующей статье планируется рассмотреть
  • SRAX.directLink — поддержка прямых AJAX ссылок
  • SRAX.linkEqual — преобразование AJAX ссылок в человеко-понятный вид
Всех благ!!! Спишемся .