AJAX - это НЕ футбольный клуб.
AJAX – это акроним, раскрывающийся как Asynchronous JavaScript And XML
и означающий асинхронный JavaScript и XML. Это набор методов веб-разработки, которые позволяют веб-приложениям
работать асинхронно — обрабатывать
любые запросы к серверу в фоновом режиме.
Давайте рассмотрим каждый термин отдельно и разберём, что такое AJAX.
В состав AJAX входят следующие компоненты:
- JavaScript – основной ингредиент AJAX, реализующий функциональность на
стороне клиента. В функциях JavaScript для манипулирования отдельными частями документа задействуется
объектная модель документа (DOM).
- Объект XMLHttpRequest (встроенный в браузер)
позволяет из JavaScript
организовать асинхронный доступ к серверу, благодаря чему пользователь имеет возможность продолжать работу
с
документом, в то время как она выполняет некоторые действия. Под доступом к серверу подразумеваются
простые
запросы HTTP на выполнение сценариев, размещенный на сервере.
- Серверные сценарии, необходимые для обслуживания
запросов поступающих из
JavaScript со стороны клиента. Эти сценарии, как правило, возвращают результаты своей работы в формате
XML.
Немного истории
Впервые термин AJAX был публично использован 18 февраля 2005 года в статье Джесси Джеймса Гарретта (Jesse
James Garrett) «Новый подход к веб-приложениям». Гарретт придумал термин, когда ему пришлось как-то назвать
новый набор технологий, предлагаемый им клиенту.
Однако в той или иной форме многие технологии были
доступны
и использовались гораздо раньше, например в
подходе «Remote Scripting», предложенном компанией Microsoft в 1998 году,
или с использованием HTML-элемента
IFRAME, появившегося в Internet Explorer 3 в 1996 году.
XMLHttpRequest не был web-стандартом до 2006 года, не смотря на то что он
был уже реализован во многих браузерах.
AJAX стал особенно популярен после использования его компанией Google в сервисах
Gmail, Google Maps и Google Suggest.
Альтернативные технологии:
- Java-апплеты, позднее технология JavaFX
- Технология Silverlight корпорации Microsoft
- Протокол WebSocket
Классическая модель веб-приложения:
- Пользователь заходит на веб-страницу и нажимает на какой-нибудь её элемент
- Браузер формирует и отправляет запрос серверу
- В ответ сервер генерирует совершенно новую веб-страницу и отправляет её браузеру и т. д., после чего
браузер полностью перезагружает всю страницу
При использовании AJAX:
- Пользователь заходит на веб-страницу и нажимает на какой-нибудь её элемент
- Скрипт (на языке Javascript) определяет, какая информация необходима для обновления страницы
- Браузер отправляет соответствующий запрос на сервер
- Сервер возвращает только ту часть документа, на которую пришёл запрос
- Скрипт вносит изменения с учётом полученной информации
Немного практических примеров:
Преимущества использования AJAX:
- Экономия трафика. Передаются данные только конкретной
части страницы,
что существенно снижает трафик
- Уменьшение нагрузки на сервер. Нет надобности обновлять
страницу
целиком, уходит конкретный запрос.
- Быстрая работа самого сервиса. Поскольку работа
происходит с конкретным
блоком, то и результат его работы можно увидеть намного быстрее.
- Простота проекта. AJAX часто используют для работы с
программным кодом и
с большой масштабностью проекта.
- Разнообразие в использовании. Действие AJAX
подразумевает под собой не
только работу с формами. Например, в поиске Google вы можете видеть подборку поисковых фраз после ввода уже
первых букв Вашего запроса.
Обмен данными
Пример кода
// 1. Создаём новый объект XMLHttpRequest
let xhr = new XMLHttpRequest();
// 2. Конфигурируем его(устанавливаем соединение):
// GET-запрос на URL 'http://domain/service'
xhr.open('GET', 'http://domain/service');
// 3. вызывает функцию при смене состояния
xhr.onreadystatechange = function() {
// завершился ли запрос?
if (xhr.readyState !== 4) return;
if (xhr.status === 200) {
// Запрос завершен. Здесь можно обрабатывать результат
console.log(xhr.responseText);
}
else {
// Если код ответа сервера не 200, то это ошибка
console.log('HTTP error', xhr.status, xhr.statusText);
}
};
// 4. Отсылаем запрос
xhr.send();
Для того, чтобы осушествлять обмен данными, на странице должен быть создан обьект XMLHttpRequest, который
является своеобразным посредником между браузером пользователя и сервером. С помощью XMLHttpRequest можно
отправить запрос на сервер, а также получить ответ в виде различного рода данных.
Методы объекта XMLHttpRequest
- abort() — отмена текущего запроса к серверу.
- getAllResponseHeaders() — получить все заголовки ответа
от сервера.
- getResponseHeader(«имя_заголовка») — получить указаный
заголовок.
- open(«тип_запроса»,«URL»,«асинхронный»,«имя_пользователя»,«пароль»)
—
инициализация запроса к серверу, указание метода запроса. Тип запроса и URL — обязательные параметры. Третий
аргумент — булево значение. Обычно всегда указывается true или не указывается вообще (по умолчанию — true).
Четвертый и пятый аргументы используются для аутентификации (это очень небезопасно, хранить данные об
аутентификации в скрипте, так как скрипт может посмотреть любой пользователь).
- send(«содержимое») — это последний этап создания http
запроса. С помощью
него также можно передать тело запроса т.е. данные от браузера к серверу. Можно не чего не передавать или
прямо указать null.
- setRequestHeader(«имя_заголовка»,«значение») — это
метод для указания
передаваемых заголовков, здесь мы можем указать что данные идут в url либо закрытым способом, либо хотим
получить данные от сервера в json формате.
Свойства объекта XMLHttpRequest
- onreadystatechange — одно из самых главных свойств
объекта
XMLHttpRequest. С помощью этого свойства задаётся обработчик, который вызывается всякий раз при смене
статуса объекта.
- readyState — число, обозначающее статус объекта.
- responseText — представление ответа сервера в виде
обычного текста
(строки).
- responseXML — объект документа, совместимый с DOM,
полученного от
сервера.
- status — состояние ответа от сервера.
- statusText — текстовое представление состояния ответа
от сервера.
Cвойство readyState:
P.S. Именно опираясь на состояние готовности объекта можно представить посетителю информацию о том, на какой
стадии находится процесс обмена данными с сервером и, возможно, оповестить его об этом визуально.
Пример кусочка кода из реального проекта
Пример ответа сервера
Что же такое SPA и как оно сзязано с AJAX?
SPA (single page application) – это веб-приложение, работающее на одной
странице. Оно подгружает все
необходимые javascript и css файлы при первой загрузке страницы, а затем все общение между клиентом и сервером
сводится к минимуму. Т.е. при таком подходе большая часть работы сайта производится на стороне клиента, а если
нужно получить данные с сервера, то это обычно делается с помощью JSON.
Такой способ создания сайтов появился относительно недавно, с приходом HTML5, но уже активно набирает обороты.
В принципе, здесь нет ничего удивительного, ведь такое веб-приложение будет работать намного быстрее обычных
сайтов, да и разработка не займет много времени. Благо, что сейчас уже есть куча фреймворков, которые
позволяют создавать очень сложные сайты такого типа достаточно просто и быстро. На данный момент лучшим
фреймворком считается React. У него больше плюсов, чем у конкурентов, а также он прост в изучении и
использовании.
Всем спасибо за внимание!