1 Метод open() уже был вызван, но метод send() еще не вызывался
2 Метод send() был вызван, но ответ от сервера еще не получен
3 Идет прием данных от сервера. Значение 3 свойства readyState в Firefox и Internet Explorer отличаются; подробности см. в разделе 20.1.4.1
4 Ответ сервера получен полностьюa
a Запрос успешно завершен. – Примеч. науч. ред.
Поскольку объект XMLHttpRequest имеет всего один обработчик события, он вызы_ вается для обработки всех возможных событий. Обычно обработчик onreadysta_ techange вызывается один раз после вызова метода open() и один раз после вызова метода send(). Еще раз он вызывается, когда от сервера начинает поступать от_ вет, и последний раз – когда ответ сервера полностью принят. В отличие от боль_ шинства событий в клиентском JavaScript, обработчику onreadystatechange не пе_ редается объект события. Чтобы определить причину вызова обработчика, необ_ ходимо проверить свойство readyState объекта XMLHttpRequest. К сожалению, об_ работчику не передается даже сам объект XMLHttpRequest, поэтому необходимо определять функцию_обработчик в той области видимости, откуда ей будет дос_ тупен объект запроса. Типичный обработчик асинхронного запроса выглядит примерно следующим образом:
// Создать XMLHttpRequest с помощью описанной ранее функции var request = HTTP.newRequest();
// Зарегистрировать обработчик события для приема асинхронных извещений.
// Этот код выполняет обработку ответа и размещается во вложенной функции
// еще до того, как будет отправлен запрос.
request.onreadystatechange
= function() {
if (request.readyState
==
4) {
//
Если
прием
запроса завершился
if (request.status
==
200)
//
Если
запрос увенчался успехом
alert(request.responseText); //
отобразить
ответ сервера
20.1. Использование объекта XMLHttpRequest
}
}
// Создать запрос GET для заданного URL_адреса. Третий аргумент опущен,
// поэтому запрос будет выполнен асинхронно
request.open("GET", url);
// Здесь в случае необходимости можно было бы определить дополнительные
// заголовки в запросе.
// Передать запрос. Поскольку это запрос GET, в качестве тела запроса
// передается значение null. Так как это асинхронный запрос, метод send()
// не блокируется и сразу же возвращает управление.