Книга: Выразительный JavaScript
Асинхронные запросы
Асинхронные запросы
В примере запрос был окончен, когда заканчивается вызов send
. Это удобно потому, что свойства вроде responseText
становятся доступными сразу. Но это значит, что программа наша будет ожидать, пока браузер и сервер общаются меж собой. При плохой связи, слабом сервере или большом файле это может занять длительное время. Это плохо ещё и потому, что никакие обработчики событий не сработают, пока программа находится в режиме ожидания – документ перестанет реагировать на действия пользователя.
Если третьим аргументом open
мы передадим true
, запрос будет асинхронным. Это значит, что при вызове send
запрос ставится в очередь на отправку. Программа продолжает работать, а браузер позаботиться об отправке и получении данных в фоне.
Но пока запрос обрабатывается, мы не получим ответ. Нам нужен механизм оповещения о том, что данные поступили и готовы. Для этого нам нужно будет слушать событие “load”
.
var req = new XMLHttpRequest();
req.open("GET", "example/data.txt", true);
req.addEventListener("load", function() {
console.log("Done:", req.status);
});
req.send(null);
Так же, как вызов requestAnimationFrame
в главе 15, этот код вынуждает нас использовать асинхронный стиль программирования, оборачивая в функцию тот код, который должен быть выполнен после запроса, и устраивая вызов этой функции в нужное время. Мы вернёмся к этому позже.
- Запросы на обновление
- Запросы, подсчитывающие строки
- Урок 7.5. Запросы
- Короткие поисковые запросы
- 7.6.1 Эхо-запросы и эхо-ответы
- Запросы
- Асинхронные вызовы процедур
- Запросы, поступающие от начальства
- Коррелированные подзапросы
- 18.1.3.5. Запросы с данными в формате multipart
- Первые запросы
- Запросы на основе команды SELECT INTO