JavaScript – распространенный язык программирования. Он используется преимущественно для создания сайтов, а также веб-сервисов. Обладает простым и понятным синтаксисом, а также разнообразными инструментами и библиотеками.

Веб-разработку трудно представить без синхронных и асинхронных запросов. Далее предстоит изучить их более подробно. Особое внимание необходимо уделить такому объекту как XHR. Он позволит разрабатывать веб-сайты максимально эффективно. Данный объект имеет множество особенностей. Представленная ниже информация поможет увидеть разницу в синхронных и асинхронных «командах». Она также позволит понять, что собой представляет XHR и пояснить основные методы работы с соответствующим объектом.

Синхронный запрос

Работа в Интернете базируется на обработке разнообразных запросов – как от клиентской стороны, так и от серверной. При получении запроса от на сервер ведется их обработка системой с последующим выводом результатов (ответов) клиенту. Соответствующие «команды» могут работать несколькими способами: синхронно и асинхронно.

Синхронный запрос является наиболее распространенным. Он может называться обычным для веб-приложений и страниц в Интернете. Он работает по следующей схеме:

  1. Человек заполняет на сайте форму обратной связи. Он нажимает на кнопку, отвечающую за отправку соответствующей анкеты на сервер.
  2. Браузер определяет нажатие на кнопку «Отправить» и понимает, что этот управляющий элемент должен отправить запрос на серверную сторону. Он пакует «команду», а затем отправляет ее на сервер.
  3. Сервер получает запрос и обрабатывает его. Результатом станет новая веб-страница. Он направляется браузеру.
  4. Интернет-обозреватель получает ответ с серверной стороны, а затем загружает веб-страницу с нуля. 

Синхронность здесь заключается в том, что все данные будут отправляться на сторону сервера массово. Страница, возвращаемая клиенту, тоже обновляется полностью.

Соответствующий принцип наблюдается при работе форм обратной связи: пользователь нажимает на кнопку, а браузер для демонстрации новых данных начинает грузить новую страницу. Синхронный запрос – всего лишь один из способов работы запросов в клиент-серверной модели.

Особенности синхронного запроса

О синхронных запросах необходимо запомнить следующее:

  • подавляющая часть любого программного кода на JavaScript является синхронной;
  • выполнение синхронного кода осуществляется строчка за строчкой;
  • каждая строка кода будет ждать, пока завершится выполнение предыдущей строки;
  • длительные операции блокируют реализацию приложения/запроса.

Несмотря на распространение данного принципа работы запросов, существует еще один вариант их функционирования. Для этого AJAX использует специальный объект – XHR (XMLHttpRequest). Далее он будет рассмотрен более подробно, как и еще один способ обработки запросов в клиент-серверных моделях.

Асинхронная работа

Второй вариант работы AJAX-requests – асинхронно. Они не загружают новую информацию с новой страницей полностью. Вместо этого после отправки той или иной команды на серверную сторону обновится только часть данных – недостающий информационный блок. Он будет добавлен на уже открытую страницу, после чего выведен на экран пользователю. Сайт при использовании асинхронных AJAX-запросов не перезагружается.

Чтобы лучше понимать принцип их функционирования, рекомендуется рассмотреть наглядный пример работы соответствующего типа «команд»:

  1. Пользователь заполняет электронную форму обратной связи. Он нажимает на кнопку «Отправить», чтобы сформировать запрос.
  2. Браузерная сторона запускает специальный скрипт. Он заранее привязывается разработчиком к кнопке.
  3. Скрипт отправляет запрос на сторону сервера. Ответом будет новый блок информации. Страница, открытая у пользователя в браузере, перезагружаться не станет. Все операции происходят в пределах заданного скрипта.
  4. Скрипт просмотрит ответ от сервера и внедрит новую информацию в старую страницу в Интернете.

На сайте при использовании XHR появляются лишь обновленные данные. Сама страница обновлению не подлежит.

Асинхронные «команды» используются повсеместно. К ним можно отнести: добавление новой продукции в Интернет-магазин, показ статуса заказа в службе доставки в режиме реального времени, сворачивание видео в небольшой плеер в углу веб-сайта, получение списка новых сообщений в онлайн-чате без его непосредственного обновления.

Особенности асинхронных «команд»

При изучении XHR request необходимо помнить следующее:

  • асинхронно – это значит «не одновременно»;
  • асинхронный код будет запускаться только после того как выполняемая в «фоновом режиме» задача подойдет к концу (завершится);
  • асинхронный код – это неблокирующий код;
  • поток выполнения не будет ждать завершения асинхронной операции;
  • callback-функции не делают исходный код асинхронным.

Асинхронная обработка «команд» дает возможность избежать задержки в процессе работы веб-портала. Пользователям не придется ожидать ответа от серверной стороны. Они смогут продолжать выполнение различных действий в пределах имеющейся веб-страницы.

Запрошенная информация обрабатывается в фоновом режиме. Ответ от серверной части системы обновляет страницу после поступления соответствующих данных. При задержке ответа пользователи даже не заметят этого: они будут взаимодействовать с другой частью страницы.

AJAX – это…

При изучении XHR необходимо пользоваться AJAX-запросами (Asynchronous JavaScript and XML). Так называется подход к реализации интерактивных пользовательских интерфейсов веб-программ. Он включает в себя клиентский скрипт, который запускается в браузере и обменивается информацией с веб-сервером.

AJAX – это технология отправки запросов. Она встречается в большинстве современных приложений. AJAX-приложение может использовать XML для отправки данных. Он также предусматривает работу с JSON и простым текстом.

Чаще всего браузер при работе с соответствующей технологией использует объект XMLHttpRequest (XHR). Он отвечает за асинхронную отправку и получение информации на веб-сервер и с него в фоновом режиме. Страница, с которой взаимодействует пользователь, не блокируется. На работу с клиентской стороны также не оказывается никакого воздействия.

Объект XHR

XMLHttpRequest (XHR) – это способ, которым веб-страница способна запрашивать данные с сервера без перезагрузки. С его помощью получается сделать сайты быстрыми и умными. Отправка и получение информации осуществляется без создания помех тому, что уже отображается на экране.

Соответствующий инструмент способен решить одну большую проблему при работе в Интернете – он делает сайт креативным и живым. Пользователям на странице с XHR не придется все время ждать, пока загрузится страница. Эта особенность имеет высокий уровень значимости тогда, когда необходимо обновить только часть сайта, а не весь его целиком.

XHR – инструмент, делающий разработку более простой и эффективной. С его помощью получится создать веб-порталы, которые быстро реагируют на пользовательские действия. Он был изобретен корпорацией Microsoft в начале 90-х годов.

XHR, несмотря на слово XML в названии рассматриваемого объекта, способен работать с любыми данными текстового формата, включая бинарные. Далее этот инструмент разработки будет рассмотрен более подробно.

Что можно сделать при помощи XHR

Все современные Интернет-обозреватели поддерживают наличие встроенного объекта XHR. Он используется для запроса информации с серверной стороны. С XHR можно выполнять разнообразные операции:

  • обновлять веб-страницы, не перезагружая их полностью;
  • запрашивать данные с сервера после загрузки веб-портала;
  • получать информацию от сервера – тоже после загрузки соответствующей страницы;
  • отправлять данные на сервер в фоновом режиме.

Использовать XHR-запросы не очень трудно. Далее предстоит познакомиться с ними на наглядных примерах. Они помогут быстрее разобраться в реализациях асинхронных «команд» в клиент-серверных моделях.

Как получить данные

Первая операция, с которой предстоит познакомиться – это получение данных. Для этого необходимо создать новый XHR-объект. Делается это через экземпляр XMLHttpRequest. Его синтаксическая форма выглядит так:

const xhr = new XMLHttpRequest();

Это встроенная функция конструктора в любом современном браузере. За счет нее в процессе разработки программного обеспечения не требуется добавлять в исходный код какие-либо пакеты или библиотеки.

Теперь необходимо подготовить запрос к отправке. Для этого задействуют два аргумента:

  • используемый HTTP-метод;
  • URL, на который необходимо направить сформированный запрос.

В качестве адреса, получающего запрос, нужно воспользоваться следующей строкой:

xhr.open  (‘GET’, ‘https: reqres.in/api/users’)

Теперь можно воспользоваться предварительно настроенным запросом и отправить его на обработку:

xhr.open

Ответ от серверной стороны получен – его требуется обработать.

Обработка ответа

XHR поддерживает несколько способов прослушивания onload-событий:

  • xhr.addEventListener (“load”, reqListener);
  • xhr.onload = () => { };

Далее работа будет осуществляться со вторым методом прослушивания событий. Это связано с тем, что он обладает большей поддержкой современных браузеров.

Onload в XHR сработает, когда пользователь получит ответ для дальнейшего получения данных. Зарегистрировать его предлагается при помощи следующей конструкции:

xhr.onload = () => { console.log(xhr.response);};

В соответствующем случае в журнале консоли будет распознано множество информации. Она печатается в виде строки, но на самом деле представляет собой JSON. Для преобразования этого ответа в объект JavaScript и дальнейшего управления им необходимо воспользоваться следующей конструкцией:

XHR в JavaScript: введение в асинхронность

Еще один способ проанализировать ответ JSON – это установить для атрибута responseType значение «json»:

XHR в JavaScript: введение в асинхронность

А вот пример полного блока кода, отвечающего за принятие ответа от сервера и его дальнейшую обработку:

XHR в JavaScript: введение в асинхронность

Существуют и другие XHR-запросы. Кроме получения данных основной используемой командой в асинхронной работе клиент-серверной модели является отправка информации на серверную сторону.

Отправка данных

При создании нового пользователя на сайте необходимо отправлять данные. Эта операция помогает указывать:

  • работу пользователя;
  • пользовательское имя;
  • иные данные о человеке.

Для отправки данных тоже используется new XMLHttpRequest. Вместо GET в формируемой «команде» при вызове xhr.open() необходимо задействовать метод POST. С его помощью получится установить URL-адрес для запроса и добавить информацию для пользователя, которого хочется создать в системе:

XHR в JavaScript: введение в асинхронность

В ходе обработки соответствующей операции reqres.ini ответит на запрос со статусом 2xx. Далее он отправит дополнительную информацию об успешном создании пользователя. Выглядеть результат обработки XHR будет так:

XHR в JavaScript: введение в асинхронность

Существуют и другие методы, используемые при управлении потоком запроса.

Методы abort, send и open

Open – основной метод, работающий с запросами new XMLHttpRequest. Он был приведен ранее. Общая форма его представления имеет следующий вид:

open(method, URL, async, user, password)

Здесь:

  1. Method – это HTTP-метод. Обычно для работы с XHR используется GET или POST. Реже – PUT, DELETE, TRACE.
  2. URL – адрес запроса. Тут допускается использование разнообразных протоколов, но помня об ограничениях безопасности. Они указывают на то, что запрос со страницы может быть отправлен только на тот же протокол://домен:порт, с которого он пришел.
  3. Async – тип запроса. Если этот параметр имеет значение false, работать код будет синхронно. True указывает на синхронную работу.
  4. User, password – логин и пароль для HTTP-авторизации. Может отсутствовать.

При использовании метода open обязательными выступают только первые два аргумента. А сама по себе эта операция не открывает соединение. За соответствующую операцию отвечает send().

Метод send() имеет простую структуру:

Send(body)

Используется этот метод для отправки запроса на сервер. Body – это тело формируемого запроса. Не у всякой отправляемой «команды» оно есть. Примером может послужить GET-запрос. Если у него отсутствует тело, осуществляется передача пустой строки или null. А в POST основная информация передается именно через body.

Еще один метод, который пригодится при работе с new XMLHttpRequest – это abort(). Данная операция позволяет прервать выполнение запроса.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!