1.2 Чтение текста из локального сервера
В примере №1 показано чтение текстового файла из локального сервера с помощью технологии AJAX. Особенностью этого примера является то, что в нем, помимо решения основной задачи – получения текстовых данных из сервера и вывода их на текущей странице, решаются также задачи получения и вывода дополнительной информации учебного и отладочного характера: Оглавление Пример 1 <! DOCTYPE html>
При запуске примера №1 выполняются следующие действия: · создается объект xhr – экземпляр объекта XMLHttpRequest; · создается ссылка myDiv на элемент < div />, который используется для вывода данных в окно браузера; · в объект myDiv заносятся данные о начальном состоянии запроса к серверу; · с помощью метода open() объекта xhr задаются следующие значения параметров соединения с сервером: § метод – GET; § адрес файла на сервере – " http: //zykov/data. txt"; § значение флага асинхронного режима – true; · в качестве обработчика события onreadystatechange указывается функция handleStateChange; · с помощью метода send() объекта xhr посылается запрос на сервер. Отметим, что использование в методе open() аргумента URL, имеющего значениее " http: //zykov/data. txt? r=" +Math. random(), позволяет передать на сервер не только url-адрес текстового файла, но и случайное число, генерируемое методом random() объекта Math. Поскольку при этом каждый вызов будет отличаться от предыдущего, браузер будет передавать клиенту данные не из своего кэша, а непостредственно из сервера. Этот режим можно использовать, например, при отладке скрипта для разных значений данных на сервере. · вывод данных о текущем состоянии запроса (для состояний 1, 2, 3 и 4 – для пояснения и отладки): § номер и наименование состояния; § краткую характеристику состояния; § значение статуса ответа сервера (свойство statusText) – для тех состояний для которых браузер передает этот статус; · в состоянии 2 (HEADERS RECEIVED) получает и выведит в окно браузера значения следующих HTTP-заголовков ответа: § Content-Type; § Date; · в состоянии 4 (DONE), в котором завершается обмен данными с сервером, проверяет статус ответа сервера. Если он равен 200, т. е. обмен завершен успешно: § проверяет с помощью оператора try/catch правильность прочитанных их сервера с помощью свойства responseText данных;
§ Если данные прочитаны правильно – заносит их в элемент myDiv для вывода в окно браузера; § в противном случае – выводит сообщение " Ошибка чтения ответа" и свойства объекта Error; · если же в состоянии 4 статус ответа сервера не равен 200 – выводит сообщение " Ошибка получения данных" и статус ответа. При выполнении примера №1 в окно браузера были выведены следующие результаты его работы: Состояние 0 (UNSENT): Объект xhr создан; В случае выполнения примера №1 в синхронном режиме (async=false) были получены следующие результаты его работы: Состояние 0 (UNSENT): Объект xhr создан; Эти результаты работы в синхронном режиме показывают следующее: · событие readystatechange не вызывается при изменении состояния запроса; · скрипт после отправления запроса на сервер ожидает получения данных из сервера и только после этого продолжает свою работу. Поэтому синхронный режим в дальнейшем использоваться не будет. Оглавление Пример 1a <! DOCTYPE html> Результат работы примера №1a: Привет, клиент! Пример №1b отличается от примера №1a тем, что в нем использованы возможности, указанные в новой спецификации объекта XMLHttpRequest (см. подраздел 1. 1), а именно:
· события продвижения (вместо события readystatechange): § load – возникает, когда передача данных сервером успешно завершена; § error – возникает в случает возникновения ошибки при передачи данных из сервера; · свойство response (вместо свойства responseText), которое возвращает данные, полученные от сервера, в виде строки, если значение свойства responseType не задано (его значение по умолчанию – строка).
Оглавление Пример 1b <! DOCTYPE html> Результат работы примера №1b такой же, как результат работы примера №1a: Привет, клиент! Отметим, что в примере №1b вместо события load можно использовать событие progress и получать данные по частям (пакетам). Но в данном случае данные из сервера имеют небольшой размер и результат работы будет такой же, как и при использовании события load: Привет, клиент! Необходимо сказать, что приведенные результаты работы примеров №1, №1a и №1b были получены только при использовании браузера Internet Explorer. На остальных ведущих браузерах примеры №1 и №1a не дадут никакого разультата, а пример №1b даст сообщение " Error". Это связано с несколько различной трактовкой браузерами политики " одинакового произхождения" (" the same origin" ), которая была введена для междоменных передач данных с целью повышения их безопастности, и которую поддерживает технология AJAX (см. подраздел 1. 3). Оглавление
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|