~70% всего кода библиотеки — это реализация работы hax. Эта функция выполняет все сложные операции по обработке разных вариантов HTML кода. Можно сказать hax — это полноценное ядро анализа и обработки HTML документов. Она автоматически выделяет и применяет стили и жабаскрипты, сама регламентирует их последовательность загрузки, метод загрузки ручной (через dax) или автоматический (отдавая процесс загрузки браузеру), реализацию истории AJAX навигации, обработку document.write, window.onload, автоматическое изменение title, поддержка прямых AJAX ссылок, другое.
Рассмотри внутренний алгоритм работы hax. При получении html ответа производится анализ документа и парсинг стилей, скриптов. Если стили и скрипты внешние производится их автоматическая рекурсивная дозагрузка. Рекурсивная означает если внутри дозагружаемых скриптов, стилей есть еще внешние ссылки процес повторяется. В случае если скрипты, стили с другого домена, процесс загрузки тогда отдается браузеру и последующий анализ таких скриптов, стилей не производится.
Для реализации четкой и стабильной работы при обработке сложных HTML страниц был разработан алгоритм контроля подгружаемости и очередности выполнения скриптов, стилей и линков, который снимает с браузеров эти обязанности. За счет этого реализована хорошая, стабильная, а главное одинаково предсказуемая работы AHAH в основных веб-браузерах.
Одним из «камней в сандале» является совместное использование AJAX и document.write. При появлении в скриптах document.write — работа сайта с применением AJAX (AHAH) по умолчанию невозможна. Так как document.write можно использовать только до окончания потока вывода основной страницы. В противном случае — контент страницы просто напросто стирается. В Fullajax функция document.write переопределена, таким образом что без ошибок выполняется то что было задумано программистом. Алгоритм эмуляции этой функции был одним из самых сложных моментов при разработке библиотеки.
Также одним из сложнейших функционалов библиотеки является реализация кроссбраузерной истории AJAX навигации. В конце концов, в Fullajax работа с AJAX историей сводится к определению одного параметра вкл/выкл.
Примеры работы с hax:
hax({url:'index.html', id:'my-div'})
В элемент с id='my-div' будет загружена страница 'index.html' с использованием AJAX истории.
hax({url:'index.html', id:'my-div', nohistory:1, onload:function(){
alert('Hey Bingo!!')
}})
В элемент с id='my-div' будет загружена страница 'index.html' без использованием AJAX истории, после загрузки вылетит alert.
Список опций работы hax
- url/src — URL запроса
- id — id родительского элемента
- method — метода запроса данных post или get (по умолчанию)
- form — id формы, сама форма, id элемента или сам элемент, с которого необходимо собрать параметры
- params — строка параметров, которые необходимо включиють в запрос (name=val1&name=val2)
- callback/cb — функция обратного вызова
- callbackOps/cbo — опции, которые передаются в функцию обратного вызова
- nohistory (noHistory)- флаг использования истории AJAX навигации, по умолчанию false — т.е. история включена
- rc — использовать (true) или не использовать (false — по умолчанию) коррекцию путей относительных ссылок
- overwrite — флаг true или false (по умолчанию) перезаписи событий onclick и onsubmit при Fly AJAX (по умолчанию — функции на событиях onclick и onsubmit не перезаписываются, а дополняются)
- destroy — флаг авто удаления процесса из памяти после окончания запроса
- html — HTML текст, эмуляция ответа, при наличии данного параметра запрос данных c сервера не осуществляется
- anticache/nocache — флаг антикеширования true или false (по умолчанию)
- startpage — признак первой страницы истории true или false (по умолчанию)
- async — флаг выполнения асинхронного запроса true (по умолчанию) или false
- historycache — флаг использования кеша истории true или false (по умолчанию используется USE_HISTORY_CACHE)
- seal — флаг «изоляции» true или false (по умолчанию) — используется для решения конфликтов css стилей
- user — username, для подключения требующего имя юзера
- pswd — password, для подключения требующего пароль
- headers — массив header-ов из обьектов {ключ: значение}, которые необходимо передать на сервер. пример -> headers:[{Etag: '123'}, {'Accept-Encoding': 'gzip,deflate'}]
- add — флаг true или false (по умолчанию), определяет принцип добавления подгружаемого контента в родительский элемент: перезапись (false) или добавление (true)
- onload — функция, которая вызывается после полной загрузки контента в элемент
- loader — лоадер-индикатор, если не определен — используется лоадер по умолчанию
- notitle — флаг true или false (по умолчанию), отключает авто-изменение title
- onerror — функция, которая вызывается в случае ошибки загрузки контента
- storage — флаг использования локального хранилища true (по умолчанию) или false — действует только при подключении SRAX.Storage
- etag — флаг использования Etag для идентификации новизны данных в локальном хранилище true (по умолчанию) или false — действует только при подключении SRAX.Storage