Книга: JavaScript. Подробное руководство, 6-е издание
18.1.2.1. Получение синхронного ответа
18.1.2.1. Получение синхронного ответа
Сама природа HTTP-ответа предполагает их асинхронную обработку. Тем не менее объект XMLHttpRequest
поддерживает возможность получения ответов в синхронном режиме. Если в третьем аргументе передать методу open()
значение false, выполнение метода send()
будет заблокировано до завершения запроса. В этом случае отпадает необходимость использовать обработчик события: после того как метод send()
вернет управление, можно будет сразу же проверить свойства status
и responseText
объекта XMLHttpRequest
. Сравните следующую синхронную реализацию функции getText()
из примера 18.2:
// Выполняет синхронный запрос HTTP GET содержимого по указанному URL-адресу.
// Возвращает текст ответа. Возбуждает исключение в случае неудачи
// или если ответ не является текстом,
function getTextSync(url) {
var request = new XMLHttpRequest(); // Создать новый запрос
request.open( "GET", url, false); // false - синхронный режим
request.send(null); // Отправить запрос
// Возбудить исключение, если код состояния не равен 200
if (request.status !== 200) throw new Error(request.statusText);
// Возбудить исключение, если ответ имеет недопустимый тип
var type = request.getResponseHeader("Content-Type");
if (!type.match(/~text/))
throw new Error("Ожидался текстовый ответ; получен: " + type);
return request.responseText;
}
Синхронные запросы выглядят весьма заманчиво, однако использовать их нежелательно. Интерпретатор JavaScript на стороне клиента выполняется в единственном потоке, и когда метод send()
блокируется, это обычно приводит к зависанию пользовательского интерфейса всего броузера. Если сервер, к которому выполнено подключение, отвечает на вопросы с задержкой, броузер пользователя будет зависать. Тем не менее в разделе 22.4 вы познакомитесь с одним из случаев, когда синхронные запросы вполне допустимы.
- 18.1.2. Получение ответа
- Получение статистики
- Включение и отключение синхронного вывода
- Получение помощи
- Получение помощи по работе с книгой и компакт-диском
- Получение помощи по Windows SharePoint Services 3.0
- Получение доменного имени
- 4.8. Получение прав root
- Получение страниц заполненных нулями
- Получение статистики браузера
- Получение, создание и отправка электронной корреспонденции
- Обзор методов асинхронного ввода