JavaScript. Подробное руководство, 6-е издание, стр. 279
<b> }</b><b> };</b><b> request.send(null); // Отправить запрос</b><b>}</b>18.1.2.1. Получение синхронного ответа
Сама природа HTTP-ответа предполагает их асинхронную обработку. Тем не менее объект
<b>XMLHttpRequest</b><b>open()</b><b>send()</b><b>send()</b><b>status</b><b>responseText</b><b>XMLHttpRequest</b><b>getText()</b><b>// Выполняет синхронный запрос HTTP GET содержимого по указанному URL-адресу.</b><b>// Возвращает текст ответа. Возбуждает исключение в случае неудачи </b><b>// или если ответ не является текстом, </b><b>function getTextSync(url) {</b><b> var request = new XMLHttpRequest(); // Создать новый запрос</b><b> request.open( "GET", url, false); // false - синхронный режим</b><b> request.send(null); // Отправить запрос</b><b> // Возбудить исключение, если код состояния не равен 200</b><b> if (request.status !== 200) throw new Error(request.statusText);</b><b> // Возбудить исключение, если ответ имеет недопустимый тип</b><b> var type = request.getResponseHeader("Content-Type");</b><b> if (!type.match(/~text/))</b><b> throw new Error("Ожидался текстовый ответ; получен: " + type);</b><b> return request.responseText;</b><b>}</b>Синхронные запросы выглядят весьма заманчиво, однако использовать их нежелательно. Интерпретатор JavaScript на стороне клиента выполняется в единственном потоке, и когда метод
<b>send()</b>18.1.2.2. Декодирование ответа
В примерах выше предполагалось, что сервер возвращает ответ в виде простого текста, с MIME-типом «text/ріаіп», «text/html» или «text/css», и мы извлекаем его из свойства
<b>responseText</b><b>XMLHttpRequest</b>Однако существуют и другие способы обработки ответов сервера. Если сервер посылает в ответе XML- или XHTML-документ, разобранное представление XML-документа можно получить из свойства
<b>responseXML</b><b>Document</b><b>responseXML</b>Если в ответ на запрос серверу потребуется отправить структурированные данные, такие как объект или массив, он может передать данные в виде строки в формате JSON (раздел 6.9). После получения такой строки содержимое свойства
<b>responseText</b><b>JSON.parse().</b><b>Document</b><b>JSON.parse(),</b>Пример 18.3. Синтаксический анализ НТТР-ответа
<b>// Выполняет запрос HTTP GET на получение содержимого по указанному URL-адресу.</b><b>// При получении ответа он передается функции обратного вызова </b><b>// как разобранный объект XML-документа, объект JS0N или строка, </b><b>function get(url, callback) {</b><b> var request = new XMLHttpRequest(); // Создать новый запрос</b><b> request.open("GET", url); // Указать URL-адрес ресурса</b><b> request.onreadystatechange = function() { // Определить обработчик события</b><b> // Если запрос был выполнен и увенчался успехом</b><b> if (request.readyState === 4 && request.status === 200) {</b><b> // Определить тип ответа</b><b> var type = request.getResponseHeader("Content-Type");</b><b> // Проверить тип, чтобы избежать в будущем передачи ответа</b><b> // в виде документа в формате HTML</b><b> if (type.index0f("xml") !== -1 && request.responseXML)</b><b> callback(request.responseXML); // Объект XML</b>