Хотите получать новые советы по заработку и раскрутке сайтов? !
Не знаете как подписаться? Читайте здесь!

Новомодная технология AJAX + PHP = как? В лёгкую и с примерами!

3 июня, 2008


Последнее время, в свете веб-два-нольных событий, AJAX стал очень популярной технологией. Никакой веб-два-нольный стартап сейчас не мыслит своё существование без этой технологии.

Представьте себе такую ситуацию, что нужно Вам запустить стартап, а AJAX’a Вы или Ваш программист не знаете. Что делать, если изучить его нужно максимально быстро? Именно поэтому я и написал эту заметку, после прочтения которой всё должно стать простым и понятным. Если Ваш разработчик не знает AJAX’а - смело шлите его на эту заметку, поможем ;)

Так что же это такое AJAX?

AJAX (Asynchronous Javascript and XML) - асинхронный JS и XML. То есть Ваши страницы смогут получать данные не прибегая к перезагрузке страницы. AJAX это не язык, как Вы могли сейчас подумать. Это просто технология использующие другие технлогии: динамическое обращение к серверу и DHTML для изменения содержимого элементов на странице.

Что нужно для начала работы с AJAX?

Для работы с технологией AJAX я предлагаю использовать фреймвёрк Prototype.

Почему он?

  • простота работы с AJAX
  • отличная браузерная поддержка. Судите сами:
    • Opera >= 9.25
    • Mozilla Firefox >= 1.5
    • Apple Safari >= 2.0
    • Microsoft Internet Explorer >= 6.0

Т.е. Вам не нужно заботиться о том, что какой-то браузер не поддерживает чего-то. За Вас заботится об этом команда фреймвёрка PrototypeJS. Ваша задача - только программировать и выдавать креативные фишки :)

Первый шаг в сторону начала работы с AJAX - это конечно же скачать сам фреймвёрк и подключить его.
Качаем Prototype самой свежей версии.

Подготавливаем страницу для работы с AJAX

В качестве подготовки нам нужно подключить JS скрипт PrototypeJS:

<script type="text/javascript" src="prototype-1.6.0.2.js"></script>

AJAX подключен. Создадим небольшой HTML файл для проверки работоспособности AJAX:

<html>
<head><title>AJAX Forever!</title></head>
<body>

<h1>Работа с AJAX</h1>
<div id="updateMe">Update me!!!</div>

<script type="text/javascript" src="prototype-1.6.0.2.js"></script>

<script type="text/javascript">
// ... здесь будем испытывать наши JS скрипты...
</script>

</body>
</html>

Всё готово к старту работы с технологией AJAX!

Небольшое введение в терминологию AJAX…

Для того, чтобы обратиться к DOM элементу веб-страницы мы используем что-то вроде:

document.getElementById("elementId");
document.all["elementId"];

В PrototypeJS у нас есть возможность сократить трудозатраты по написанию этого кода до следующего:

$('elementId')

То есть можно написать что-то вроде:

$('updateMe').style.color = 'green';

(*updateMe - это в случае с нашей вышеописанной страницей)

Помимо функции $() существует похожая функция $F(), которая позволяет получить значение любого элемента. Причём, если это поле формы - оно вернёт его значение, а в случае с элементом select - функция вернёт выбранный пункт.

ajax: осуществление запроса

Создаём простейший скрипт 1.php, который будет состоять всего лишь из одной строчки:

<?php echo 'hello AJAX!!!'; ?>

(особенно не распыляемся на РНР скриптинг, поскольку это не тема для данной статьи).

Теперь первый наш AJAX скрипт:

new Ajax.Request( '1.php',
{
	method: 'get',
	onSuccess: function( transport ){
		var responseStr = transport.responseText || "пусто...";
		alert( responseStr );
	},
	onFailure: function(){
		alert( 'Какая-то ошибка...' )
	}
});

Запускаем и… о чудо! Оно работает!
Alert нам выдаёт сообщение hello AJAX!!!, которое получено было из скрипта 1.php.

ajax: обновление содержимого элемента

Теперь, рассмотрим ситуацию когда нам нужно изменить содержание нашего элемента updateMe. Не зря же мы его таким говорящим названием назвали! И это также осуществляется элементарно:

new Ajax.Updater( 'updateMe', '1.php', { method: 'get' } );

В данный момент здесь указан метод отправки данных: GET, если указано это явно не будет - по дефолту использоваться будет POST.

Если мы не хотим, чтобы предыдущий существующий текст затирался, используем Updater следующим образом:

new Ajax.Updater( 'updateMe', '1.php', {
	method: 'get',
	insertion: Insertion.Bottom
});

Можете посмотреть результат. По аналогии можно использовать: insertion: Insertion.Top.

ajax: обновление содержимого с параметрами

HTTP методом GET делаем запрос с таким QUERY_STRING: text=wow!!&bbb=asdsf:

new Ajax.Updater( 'updateMe', '1.php', {
	method: 'get',
	parameters: { text: 'wow!!', bbb: 'asdsf' }
});

Развивая данную идею:

new Ajax.Updater( 'updateMe', '1.php', {
	method: 'get',
	parameters: { text: $F('someTextField'), bbb: 'asdsf' }
});

..и мы уже передаём в качестве значения параметра text - текущее значение поля someTextField.

Чтобы убедиться в работоспособности вышесказанного можно изменить наш 1.php на следующий:

echo 'hello AJAX!!! ' . $_SERVER['QUERY_STRING'];

Теперь мы будем видеть строчку запроса.

заключение

Не забывайте пожалуйста, что дефолтовая кодировка у PrototypeJS это UTF-8. Она определяется в опциях как: encoding: ‘UTF-8′. Вообще, лучше работать, как раз именно с UTF-8..

Побольше Вам сайтов посещаемых и полезных!


Отступая от темы сообщу хорошую новость для блогеров. Дмитрий S.M.A.R.T. устроил акцию по привлечению посетителей в Ваши блоги. Подробности читать .


  1. 18 Responses to “Новомодная технология AJAX + PHP = как? В лёгкую и с примерами!”

  2. Шлыков Сергей [03.06.08 14:47] | Reply

    Просто, понятно и доступно, спасибо.

    Еще неплохо бы примеры, когда AJAX является не модной фишкой, а действительно улучшает юзабилити. А если с готовыми примерами или ссылками на реализацию - вообще супер. Ведь большинство таких приложений (корзины товаров, букмарки, голосовалки и т.п.) наверняка описаны - зачем изобретать велосипед.

  3. SEOVirus [04.06.08 02:20] | Reply

    Хорошо. Подумаю над этим.

  4. Ладушки [05.06.08 17:30] | Reply

    В большинстве эти технологии - враг СЕО. А для пользователя хорошо… и тут следует для себя определиться - чему вы отдаете предпочтение.

  5. SEOVirus [05.06.08 20:00] | Reply

    Можно выбрать “золотую середину”.

    Имхо, изначально сайты нужно разрабатывать без аякса, а вот далее подцеплять уже его. Пользователи у которых включён JS - у них будет юзабельность аяксовая, с другой стороны для поисковиков есть чё поиндексить :)

  6. Antoni [09.06.08 11:57] | Reply

    Ввввау, аякс. По моему уже каждый веб девелопер знает что это, с чем едят, на чем реализовано и то что у jQuery лучший API при работе с аяксом

  7. SEOVirus [09.06.08 12:55] | Reply

    Знает может и каждый, но не каждый использует эту технологию в своих разработках.
    jQuery тоже знатная вещь. Отличный фреймвёрк.

  8. spomoni [10.06.08 04:12] | Reply

    Хороший обзор, но к сожалению, я не программист :)

  9. variable [22.06.08 03:44] | Reply

    тут нашел как с cp1251 работать

  10. VolCh [08.07.08 03:58] | Reply

    Имхо, изначально сайты нужно разрабатывать без аякса, а вот далее подцеплять уже его. Пользователи у которых включён JS - у них будет юзабельность аяксовая, с другой стороны для поисковиков есть чё поиндексить :)

    Имхо, если уж разрабатывать c AJAХ, то уж сразу на него рассчитывать, а не подцеплять куда нужно и не нужно. АЯКС позволяет делать уникальную вещь - страницы только из контента (и ссылок сапы :) ), навигация (оставляем минимум для индексации, и то сайтмап есть, главное для передачи веса), декор и все прочее выводится динамически.
    Не нужно только допускать распространенной ошибки при использования аякса (и фреймов, кстати) - когда грузят контент динамически, не изменяя URL. Надо наоборот - грузить контент статически по URL, чтобы и пользователь мог буку поставить, и поисковики видели контент, а вот всякий “мусор” типа навигации, форм, декора, счетчиков и прочего грузить динамически, активно используя кэширование и в браузере, и на стороне сервера.

    Единственная проблема (не считая трудоемкости, особенно реализацию нормального кэширования) - посетители без JS: оптимально, наверное, оставить минимум функциональности и навигации для них

  11. Техник-строитель [21.11.08 15:18] | Reply

    Всегда нужно осторожно вводить новое в уже раскрученном проекте. Бывает, что изменение меню навигации приводит к ухудшению показателей ПР, а это имхо большая плата за новшества. Реально, уже на этапе формирования проекта определиться, какие технологии будут использоваться и предусмотреть компромисные решения, а это возможно, если двиг пишется с нуля. В противном случае, код разрастается и сайт напоминает монстра:))

  12. none [26.11.08 11:52] | Reply

    Я вот всё-таки остановил свой выбор на jQuery+php. Были некоторые заморочки с передачей русского текста туда и обратно, но после их решения - просто красота, всё легко и удобно.
    А за статью спасибо, прототайп тоже достаточно известный и мощный фреймворк…

  13. максим [04.01.09 02:53] | Reply

    если нужно просто обновлять контент без перегрузки страницы, можно не заморачиватся с полноценными фреймворками, а найти мини-примочки.

    Вот такая например штука есть - 5кб всего.

    Simple AJAX Code-Kit (SACK)
    SACK is exactly what it says it is: A simple set of code to allow you to put AJAX into your webpages with none of the fuss or overhead of other packages.

  14. Tolik [21.04.10 16:21] | Reply

    Всякий раз когда начинал пытаться изучать AJAX - бросало в дрожь от километровых статей и каждый раз опускались руки. А эта статейка для новичков - СУПЕР!!!!!

  15. java_is_forever [20.05.10 14:22] | Reply

    По мне, так самое оправданное применение Ajax - это админки, которые требуют нетривиальную функциональность. Зачем индексировать админки (скорее наоборот)?!

  16. MoJo [29.09.10 18:54] | Reply

    У меня на сайте тоже технология ajax стоит. Отличная вещь.

  17. Вячеслав [02.10.10 14:04] | Reply

    Воспользовался этим готовым решением, но столкнулся с проблемой - данные приходят на сервер нормально, но запрос к бд mysql, используя эти данные, не проходит. Кто-нибудь сталкивался?

  18. SEOVirus [02.10.10 15:07] | Reply

    Ну если данные приходят успешно на сервер, то там видимо дальше что-то на стадии их обработки.. Возможно при подключении к бд.

    Потестируйте как-нибудь отдельно этот момент работы скрипта. Введите экспериментальные данные вручную в скрипте и проверьте - точно ли он коннектится корректно к бд.. а то может пароли с логинами прописали не те, а думать будете, что в этом AJAX виноват..

  19. Вячеслав [07.10.10 20:21] | Reply

    Все дело было в кодировке. Данные из бд переконвертировал в utf-8 командой mysql_query(”SET NAMES ‘utf8′”); и заработало. Теперь появилась необходимость в том, чтобы ajax работал не асинхронно, а наоборот, чтобы последующий код дождался завершения ajax и продолжил работу. Не знаешь, как сделать?

Post a Comment

Security Code: