Чтение онлайн

на главную - закладки

Жанры

Основы программирования на JavaScript

Кан Марк

Шрифт:

В действительности уже есть все, что нужно для создания приложений AJAX, но мы рассмотрим достаточно простой пример. Мы собираемся написать небольшую таблицу данных (data grid), которая извлекает данные из трех различных файлов JSON. Для простоты эти файлы уже были сгенерированы. На практике эти файлы будут скорее всего генерироваться оперативно с помощью серверного сценария.

Файл 1

{contacts:[

{"firstname":"Steve" ,"lastname":"Smith", "phone":"555-1212"},

{"firstname":"Joe" ,"lastname":"Stevens", "phone":"555-0193"},

{"firstname":"Sam" ,"lastname":"Smith", "phone":"555-5120"},

{"firstname":"Dave" ,"lastname":"Stevens", "phone":"555-0521"},

{"firstname":"Suzy" ,"lastname":"Smith", "phone":"555-9410"},

{"firstname":"Jessica" ,"lastname":"Stevens", "phone":"555-8521"},

{"firstname":"James" ,"lastname":"Smith", "phone":"555-4781"},

{"firstname":"Jacob" ,"lastname":"Stevens", "phone":"555-9281"},

{"firstname":"Alex" ,"lastname":"Smith", "phone":"555-7261"},

{"firstname":"Tam" ,"lastname":"Stevens", "phone":"555-1820"}

]}

Файл 2

{contacts:[

{"firstname":"Nancy" ,"lastname":"Smith", "phone":"555-9583"},

{"firstname":"Elane" ,"lastname":"Stevens", "phone":"555-7281"},

{"firstname":"Shawn" ,"lastname":"Smith", "phone":"555-5782"},

{"firstname":"Jessie" ,"lastname":"Stevens", "phone":"555-7312"},

{"firstname":"Matt" ,"lastname":"Smith", "phone":"555-4928"},

{"firstname":"Jason" ,"lastname":"Stevens", "phone":"555-3917"},

{"firstname":"Daniel" ,"lastname":"Smith", "phone":"555-8711"},

{"firstname":"Shannon" ,"lastname":"Stevens", "phone":"555-0912"},

{"firstname":"Diana" ,"lastname":"Smith", "phone":"555-6172"},

{"firstname":"Mark" ,"lastname":"Stevens", "phone":"555-8831"}

]}

Файл 3

{contacts:[

{"firstname":"Laura" ,"lastname":"Stevens", "phone":"555-3915"},

{"firstname":"Jeff" ,"lastname":"Smith", "phone":"555-8614"},

{"firstname":"Frank" ,"lastname":"Stevens", "phone":"555-0213"},

{"firstname":"Elizabeth" ,"lastname":"Smith", "phone":"555-7531"},

{"firstname":"Jim" ,"lastname":"Stevens", "phone":"555-3951"}

]}

Эти

файлы будут обеспечивать все данные для нашего списка контактов на AJAX. Построение списка контактов является в действительности вполне простым: создается таблица TABLE для хранения всех контактов и функция для очищения и повторного заполнения этой таблицы. Вот и все.

<table cellspacing="1" cellpadding="3" bgcolor="#000000" style="font-family:tahoma;font-size:10px;">

<tbody id="contactListTable">

<tr style="background-color:#CCF;">

<th>First Name</th>

<th>Last Name</th>

<th>Phone #</th>

</tr>

</tbody>

</table>

function loadContactListPage(n){

var oXML = getXMLHttpObj;

oXML.open('GET', '/img/10_json_file'+n+'.txt', true);

oXML.onreadystatechange = function{ doneLoading(oXML); }

oXML.send('');

}

function doneLoading(oXML){

if(oXML.readyState!=4) return;

var json = eval('('+oXML.responseText+')');

var table = document.getElementById('contactListTable');

for(var i=table.childNodes.length-1; i>0; i--){

table.removeChild(table.childNodes[i]);

}

for(var i=0; i<json.contacts.length; i++){

var tr = document.createElement('TR');

var td1 = document.createElement('TD');

var td2 = document.createElement('TD');

var td3 = document.createElement('TD');

tr.style.backgroundColor = i%2?'#FFF':'#E6E6E6';

table.appendChild(tr);

tr.appendChild(td1);

tr.appendChild(td2);

tr.appendChild(td3);

td1.appendChild(document.createTextNode(json.contacts[i].firstname));

td2.appendChild(document.createTextNode(json.contacts[i].lastname));

td3.appendChild(document.createTextNode(json.contacts[i].phone));

}

}

Демонстрационный

пример

First Name Last Name Phone #

Steve Smith 555-1212

Joe Stevens 555-0193

Sam Smith 555-5120

Dave Stevens 555-0521

Suzy Smith 555-9410

Jessica Stevens 555-8521

James Smith 555-4781

Jacob Stevens 555-9281

Alex Smith 555-7261

Tam Stevens 555-1820

Page 1 | Page 2 | Page 3

Как можно видеть из примера выше, это все достаточно просто. Большая часть кода нужна в действительности просто для создания новых строк в таблице.

AJAX может быть удивительно полезным инструментом. Его можно использовать для проверки форм перед их отправкой, для извлечения данных, как в этом примере, или для чего-то еще, что можно будет придумать. Однако в нормальной ситуации он не должен быть основным элементом Web-сайта. Обычно надо быть уверенным, что сайт будет доступен, даже если JavaScript будет отключен, но всегда существуют некоторые исключения для этого правила.

Следующая лекция будет посвящена обработке ошибок в JavaScript.

Поделиться:
Популярные книги

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

#Бояръ-Аниме. Газлайтер. Том 36

Володин Григорий Григорьевич
36. История Телепата
Фантастика:
боевая фантастика
аниме
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 36

История Шотландии с древнейших времен до флодденского сражения 1513 года.

Скотт Вальтер
Научно-образовательная:
история
5.00
рейтинг книги
История Шотландии с древнейших времен до флодденского сражения 1513 года.

Воронцов. Перезагрузка

Тарасов Ник
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Воронцов. Перезагрузка

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Почем цветочек аленький?

Луганцева Татьяна Игоревна
Женщина-цунами
Детективы:
иронические детективы
7.88
рейтинг книги
Почем цветочек аленький?

День поминовения

Нотебоом Сэйс
Проза:
современная проза
5.00
рейтинг книги
День поминовения

Газлайтер. Том 22

Володин Григорий Григорьевич
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Газлайтер. Том 22

Группа крови на рукаве

Вязовский Алексей
1. ГК
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Группа крови на рукаве

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

Вампир. Английская готика. XIX век

Стивенсон Роберт Льюис
Фантастика:
ужасы и мистика
7.67
рейтинг книги
Вампир. Английская готика. XIX век

Геном хищника. Книга четвертая

Гарцевич Евгений Александрович
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4