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

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

Жанры

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

Кан Марк

Шрифт:

При создании запроса AJAX прежде всего необходимо создать объект XMLHTTP. Netscape/Firefox, Opera и другие браузеры имеют этот объект встроенным. Internet Explorer использует ActiveXObject. Поэтому мы создадим одну функцию для работы со всеми этими браузерами:

if(typeof(XMLHttpRequest)!='undefined'){

var getXMLHttpObj = function{ return new XMLHttpRequest; }

} else {

var getXMLHttpObj = function{

var activeXObjects = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0',

'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];

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

try{

return new ActiveXObject(activeXObjects[i]);

}catch(err){}

}

}

}

Любой

браузер, который поддерживает объект XMLHttpRequest, будет использовать этот встроенный объект. Internet Explorer 6 и более ранние версии будут использовать объект ActiveX XMLHttp компании Microsoft. Существует много различных версий этого объекта, поэтому мы попробуем их все, начиная с самого нового.

Теперь, когда мы имеем объект XMLHttp, можно разместить запрос на сервере:

var oXml = getXMLHttpObj;

oXml.open('GET', 'getData.php', true);

oXml.onreadystatechange = processingFunction;

oXml.send;

function processingFunction{

if(oXml.readyState!=4) return; // запрос не выполнен

// Результаты обрабатываются здесь. Подробнее дальше!

}

После создания объекта XMLHttp остается еще 4 дополнительных шага. Сначала определяются параметры соединения с помощью функции .open. Функция .open получает 3 аргумента: тип запроса, URL и флаг, который сообщает объекту, выполняться или нет асинхронно.

Первый аргумент, тип запроса, почти всегда будет GET или POST. Если извлекаются данные, то это будет обычно GET, а если отправляется форма с AJAX, то это часто будет POST.

Флаг асинхронности немного отличается почти от всего остального в JavaScript. Если этот флаг задан как false, то код продолжает выполняться, как и любой другой фрагмент кода, то есть он ожидает, пока объект XMLHttp завершит свою работу, прежде чем двигаться дальше. Однако, если этот флаг задан как true, то код продолжает делать то, что следует в коде после запроса. Когда состояние запроса изменяется, вызывается функция, которая определена в onreadystatechange.

В чем различие? Если флаг асинхронности задан как false, то браузер будет полностью заблокирован, пока обрабатывается запрос. Если запрошенные данные нужны в обязательном порядке для продолжения работы, то используйте это значение флага. Если флаг задан как true, то пользователь может продолжать

использовать Web-страницу, но ничего не известно о том, когда вернется ответ на запрос. Может потребоваться 1/2 секунды или 1 минута. Все зависит от нагрузки на сервер и соединения конечного пользователя.

Когда все готово, посылается запрос. Затем мы ожидаем. Если запрос выполняется синхронно с функцией обработки, определенной с помощью onreadystatechange, то она будет вызываться несколько раз. На самом деле она вызывается всякий раз при изменении состояния запроса. Существуют различные состояния, такие, как отправка и загрузка данных, но нас интересует только завершение загрузки данных. Если readyState == 4, то запрос выполнен, поэтому в любом другом случае мы просто выходим из функции.

Теперь мы получили данные, но что это за данные?

Существует три возможных варианта получения данных: XML, JSON или обычный текст. При извлечении данных из базы данных, скорее всего, будет использоваться XML или JSON. Ни один из этих вариантов не имеет явных преимуществ. XML– широко распространенный стандарт, и поэтому существует много приложений, которые работают с файлами XML. JSON является более новой идеей, но быстро становится популярным. Его обычно легче прочитать (для человека), и он требует немного меньшую полосу пропускания для пересылки.

Предположим, что создается приложение для управления контактами. Cервер может возвращать информацию о людях. Одни и те же данные можно выразить в форме XML или JSON:

XML:

<xml>

<contacts>

<person firstname="Joe" lastname="Smith" phone="555-1212" />

<person firstname="Sam" lastname="Stevens" phone="123-4567" />

</contacts>

</xml>

JSON:

{contacts:[

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

{"firstname":"Sam", "lastname":"Stevens", "phone":"123-4567"}

]}

Можно видеть, что нотация XML выглядит очень похоже на HTML. По большей части это так и есть. HTML и XML оба являются основанными на тегах языками и могут даже анализироваться одинаковым образом (см. Лекция 6).

Нотация JSON выглядит очень похоже на простой JavaScript. JSON означает JavaScript Object Notation и поэтому действительно является обычным JavaScript.

Данные в любой нотации можно посылать с Web-сервера просто как обычный текст. Никакие пробелы, имеющиеся в этих примерах, не нужны, за исключением одиночных пробелов между именами атрибутов в тегах person (в версии XML).

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

О чём не пишут в книгах по Delphi

Григорьев Антон Борисович
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
О чём не пишут в книгах по Delphi

Транквилиум

Лазарчук Андрей Геннадьевич
Фантастика:
альтернативная история
5.50
рейтинг книги
Транквилиум

Современный польский детектив

Хмелевская Иоанна
Детективы:
прочие детективы
иронические детективы
5.00
рейтинг книги
Современный польский детектив

Егерь. Сердце стаи. Книга 5

Скиба Николай
5. Зверолов
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
6.80
рейтинг книги
Егерь. Сердце стаи. Книга 5

"Фантастика 2025-106" Компиляция. Книги 1-15

Александрова Марина
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
постапокалипсис
фэнтези
5.00
рейтинг книги
Фантастика 2025-106 Компиляция. Книги 1-15

Том 6. Проза, письма

Лермонтов Михаил Юрьевич
6. Собрание сочинений в шести томах
Проза:
русская классическая проза
5.25
рейтинг книги
Том 6. Проза, письма

Том 4. Повести и рассказы, статьи 1844-1854

Тургенев Иван Сергеевич
4. Собрание сочинений в двенадцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 4. Повести и рассказы, статьи 1844-1854

Я уже бог. Книга XL

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

Неучтенный элемент. Том 8

NikL
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 8

Народ, да!

Коллектив авторов
Старинная литература:
мифы. легенды. эпос
5.00
рейтинг книги
Народ, да!

Правда

Ромиг Алеата
2. Последствия
Любовные романы:
современные любовные романы
7.71
рейтинг книги
Правда

Василий Аксенов. Сентиментальное путешествие

Петров Дмитрий Павлович
Остров Аксенов
Документальная литература:
биографии и мемуары
прочая документальная литература
5.00
рейтинг книги
Василий Аксенов. Сентиментальное путешествие

Библия. Синодальный перевод

Священное Писание
Религия и эзотерика:
религия
5.00
рейтинг книги
Библия. Синодальный перевод

Мадрапур

Мерль Робер
Проза:
современная проза
7.00
рейтинг книги
Мадрапур