Пример использования Ajax

05.08.2009 | Рубрика: Разработка

ПрограммированиеРубрика «Мастерская программиста» продолжает пополняться материалами о технологии Ajax. В этой статье, наконец-то, будет рассмотрен конкретный пример ее использования. Архив, содержащий код, описанный в статье, находится здесь. Если вы не являетесь нашим постоянным читателем, возможно, для понимания изложенного материала, вам придется прочитать предыдущие статьи, посвященные Ajax. Вы сможете найти их в уже упомянутой рубрике.

Попробуем решить типичную задачу – загрузку выпадающего списка. Пусть в нашем каталоге есть два списка select: производитель и модель, при смене производителя должен загружаться соответствующий список моделей c сервера. Для этого понадобятся следующие части кода (они могут быть разнесены по файлам или же объединены в один – не принципиально):

HTML-часть:

1
2
3
4
5
6
7
8
9
10
11
12
13
<form>
<select id=”vendors”>
<option value=1”>Toyota</option>
<option value=2”>Nissan</option>
<option value=3’>Subaru</option>
</select>

<select id=”models”>
<option value=1”>Supra</option>
<option value=2”>Carina</option>
<option value=3”>Alteza</option>
</select>
</form>

Javascript-часть (на jQuery):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(document).ready(function(){
    $('#vendors').change(function(){
        $.getJSON(
            '2.php',
            {'vendor':$(this).attr('value')},
            function(data){
                $('#models option').remove();
                for (i in data){
                    $('#models').append('<option value="'+i+'">'+data[i]+'</option>');
                }
            }
        );
    });
});

PHP-часть:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
switch ($_GET['vendor']){
    case '1':
        $models = array(
            1 => 'Supra',
            2   => 'Carina',
            3   => 'Alteza'
        );
        break;
    case '2':
        $models = array(
            4   =>  'Avenir',
            5   =>  'Cube'
        );
        break;
    case '3':
        $models = array(
            6 => 'Impreza'
        );
        break;
}

echo json_encode($models);

В реализации php-части может быть любой другой метод получения данных, важно лишь, чтобы $models был ассоциативным массивом.

При выборе другой модели браузер обратится к скрипту 2.php (лог снифера):

1
2
3
4
GET /demo/2.php?vendor=2 HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: application/json, text/javascript, */*, text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
...

«application/json» означает, что браузер ожидает в ответ данные в формате json. Json – это ассоциативный массив в формате javascript, он очень похож на массив в php. Чтобы получить из массива php строку json, нужно выполнить функцию json_encode(), чтобы получить из строки json массив php, нужно выполнить функцию json_decode().

После выполнения команды echo json_encode($models) сервер посылает ответ, который мы можем наблюдать в снифере:

1
2
3
4
5
HTTP/1.1 200 OK
Content-Length: 25
Content-Type: text/html

{"4":"Avenir","5":"Cube"}

Последняя строка и есть данные в формате json. Браузер принимает ответ, преобразует строку в массив data и передаёт его в анонимную функцию.

Если вы интересуетесь технологией Ajax, задавайте интересующие вас вопросы в комментариях к этой статье. Мы постараемся ответить на них в следующих статьях, посвященных Ajax.

Метки: , ,

Похожие материалы:

  1. Когда стоит использовать Ajax
  2. Введение в Ajax
  3. JavaScript-библиотеки с поддержкой XHR
  4. pChart – рисуем графики в PHP
  5. Обзор сайтов для веб-разработчика
RSS
Следите за обновлениями сайта по RSS, или в .
Есть вопросы? Задайте их на нашем форуме, без регистрации.
Оставить комментарий
7 Комментариев
  • Ответить

    Спасибо! Отличная статья!

  • Ответить

    а в заголовке случаяно нет опечатки?

  • Ответить

    Опечатки нет – http://web20.su/2009/07/ajax-introduction.html

    ajax = javascript + xml
    ajaj = javascript + json
    ajah = javascript + html

  • Ответить

    ADMIN
    Вообще то Ajax Это технология которую расшифровывают примерно как асинхронный JavaScript, а javascript + xml, ajaj = javascript + json, javascript + html – это средства которыми можно передавать данные на сервер и получать ответ от него. так что надо было написать что это ПРИДУМАНЫЕ ЛИЧНО ВАМИ Абривиатуры. Дабы не вводить людей в заблуждения!!!!

  • Ответить

    Раз заголовок вызывает недоумение у посетителей – исправляю.
    Sanich, аббревиатура придумана не лично мной, в чем легко убедиться с помощью гугла. А вот слово «аБрИвиатура» придумали лично вы :)

  • Ответить

    Мастерская прогарммиста в шапке пофиксить бы.

  • Ответить

    @Гость,
    спасибо, исправил.

Оставить комментарий

Вы можете войти, зарегистрироваться или оставить анонимный комментарий:

* Имя
* E-mail
Блог (если есть)
* Антиспам: 1 + 9 = ?
* - обязательные поля, e-mail не публикуется.