AJAX, AJAH, AHAH и AJAJ
Ну вот, наконец, и добрался до темы AJAX`а. Начну с определения. AJAX (от англ. Asynchronous Javascript and XML — «асинхронный JavaScript и XML») – это технология асинхронной передачи данных между браузером и сервером. Асинхронность подразумевает передачу данных без перезагрузки страницы. Другими словами, Вы можете реагировать на действия пользователя более оперативно, что сделает Ваше приложение более интерактивным. Например, в форме проверки логина на занятость, проверку можно выполнить сразу, после того как введен логин, не перезагружая страницу (я думаю все уже встречались с таким). |
Прежде чем перейти к примерам, еще немного расскажу про способы передачи данных… В названии AJAX`а упоминается XML, хотя в настоящее время, для асинхронной передачи данных он используется не так часто (в чистом виде, по крайней мере). Помимо XML, используют HTML (технология называется AJAH), HTML+HTTP (AHAH) и Javascript + JSON (AJAJ).
Примеры я буду приводить на javascript Фреймворке – jQuery, о котором я писал в одной из предыдущих статей. jQuery поддерживает все три вида асинхронной передачи данных.
Для работы с AJAX в jQuery есть много функций, но основными являются .get() и .post().
Их синтаксис такой:
$.post(url[, params[, callback]])
$.get(url[, params[, callback]])
url – адрес куда отправлять запрос POST (GET),
params – параметры в формате {param1: value1, param2:value2}
callback – функция, которая будет выполняться после возвращения страницей ответа за запрос (в качестве аргумента ей передается сам ответ).
Итак, первый пример:
index.html
<head>
<title>AJAX test</title>
<script type="text/javascript" src="jquery.js"></script>
<script>
function LoadPhpVersion() {
$.post('version.php', {}, show_version);
}
function show_version(version) {
$('#version_box').html(version);
}
</script>
</head>
<body>
<a href="javascript:void(0);" onClick="LoadPhpVersion('version_box');">AJAX it!</a><br />
Your php version is : <span id="version_box"></span>
</body>
</html>
version.php
echo phpversion();
?>
Также в каталоге с этими файлами должен лежать файл jquery.js с библиотекой jQuery (далее это подразумевается всегда).
В этом примере мы просто отправили POST запрос без параметров скрипту version.php, который возвратил в ответ версию Вашего PHP. А функция show_version вывела ее на html-страницу. Как видите все очень просто.
Но, в нашем случае все может быть ЕЩЕ ПРОЩЕ.
Используем AHAH.
В предыдущем примере результатом нашего запроса был полученный html-код (просто текст), который просто вывели в нужное место. Такая операция очень часто используется при совместной работе шаблонизаторов и AJAX`а (т.е. AHAH`а).
Для работы именно с AHAH`ом в jquery предусмотрен метод .load().
Перепишу предыдущий пример, но в этот раз буду использовать AHAH.
index.html
<head>
<title>AJAX test</title>
<script type="text/javascript" src="jquery.js"></script>
<script>
function ShowVersion(elem_id) {
$('#'+elem_id).load('version.php');
}
</script>
</head>
<body>
<a href="javascript:void(0);" onClick="ShowVersion('version_box');">AJAX it!</a><br />
Your php version is : <span id="version_box"></span>
</body>
</html>
version.php
echo phpversion();
?>
В этом примере javascript-код значительно сократился. Как видите, для работы метода .load необходимо просто указать элемент, куда будет подгружен результат и передать ему имя скрипта которому отправлять запрос.
Все стало еще проще.
AJAJ
Напоследок рассмотрю еще один, очень удобный формат передачи данных – JSON.
С помощью этого формата и технологии AJAJ в jQuery, есть возможность передавать от PHP данные не одним куском, а уже в виде полей объекта, то есть за раз можно вернуть несколько переменных.
Работа с AJAJ в jQuery реализована через метод .getJSON()
Пример…
index.html
<head>
<title>AJAX test</title>
<script type="text/javascript" src="jquery.js"></script>
<script>
function GetVersion() {
$.getJSON('version.php', {}, function(obj){
$('#version_box').html(obj.version);
$('#text_box').html(obj.text);
});
}
</script>
</head>
<body>
<a href="javascript:void(0);" onClick="GetVersion(); return false;">AJAX it!</a><br />
Your php version is : <span id="version_box"></span><br />
Text : <span id="text_box"></span>
</body>
</html>
version.php
version: '<?=phpversion();?>',
text: 'Hello'
}
В этом примере на стороне сервера генерируется две переменных в формате JSON : version, text и выводятся.
На стороне клиента (браузера) этот блок преобразуется в объект (через функцию eval) с двумя полями – obj.version и obj.text.
Кстати, в jQuery еще есть метод .getScript().
Синтаксис:
$.getScript(‘script.js’);
Этот код загрузит с сервера файл с javascript`ом script.js и выполнит в браузере его код.
Вот, в принципе и все.
P.S. При разработке приложений с использованием ajax`а, рекомендую использовать браузер Firefox с плагином Firebug (очень удобно отслеживать заголовки передаваемые от браузера клиенту асинхронно).
Кстати, очень большая перспектива сейчас у связки PHP+Ajax, все больше и больше сайтов создаются уже не на чистом пхп. Даешь отдельную рубрику теме!
Хм. Как только наберу статьей немного по этой теме - выделю в отдельную рубрику обязательно
спасибо за пост, собираюсь тоже немного юзать аджакс в своем коде, пока в закладки добавлю
{
version: ”,
text: ‘Hello’
}
Как передать ” ?
Где использовать eval() ?
2 Андрей: eval() делается автоматически в ядре библиотеки. ” прям так и передать.
Скажи а почему когда я передаю данные в пхп файл то данные в пхп файле принимаются закорлючками ?
Вы наверно передаете данные в кириллице. Попробуйте сделать так, чтобы кодировка страницы (с которой передаете) была в UTF-8. И принимайте в PHP файле соответственно в этой же кодировке. Можно и не UTF-8. Главное - чтобы кодировки совпадали с обеих сторон.
тест AHAH с внутренними javascripts
jQuery [ссылка] - load page ~ 36.7 second
Fullajax [ссылка] - load page ~ 3.5 second
Спасибо, это как раз то что мне очень надо:)
Тема знатная.
Много ей уделяю времени - не жалею что изучаю. Все больше и больше прелестей нахожу. Но особо увлекаться тоже не стоит ибо есть еще и поисковая оптимизация. Поисковые системы и AJAX пока не нашли между собой общий язык.