AJAX – группа технологий, которая используется в веб разработке для создания интерактивных приложений. AJAX позволяет передавать данные с сервера без перезагрузки страницы. Таким образом можно получать очень впечатляющие результаты. А библиотека jQuery существенно облегчает реализацию AJAX с помощью встроенных методов.
Для реализации технологии используется метод $.ajax или jQuery.ajax:
$.ajax(свойства) или $.ajax(url [, свойства])
Второй параметр был добавлен в версии 1.5 jQuery.
url – адрес запрашиваемой страницы;
properties – свойства запроса.
Полный список параметров приведен в документации jQuery.
В уроке мы используем несколько наиболее часто используемых параметров.
success (функция) – данная функция вызывается после успешного завершения запроса. Функция получает от 1 до 3 параметров (в зависимости от используемой версии библиотеки). Но первый параметр всегда содержит возвращаемые с сервера данные.
data (объект/строка) – пользовательские данные, которые передаются на запрашиваемую страницу.
dataType (строка) – возможные значения: xml, json, script или html. Описание типа данных, которые ожидаются в ответе сервера.
type (строка) – тип запроса. Возможные значения: GET или POST. По умолчанию: GET.
url (строка) – адрес URL для запроса.

Здравствуйте, уважаемые читатели блога LifeExample, наконец-то меня посетило вдохновение и я готов порадовать вас новым, большим и полезным материалом для начинающих web-мастеров. В этой статье речь пойдет о золотой технологии AJAX и примерах скриптов, написанных на её основе.
Сегодня я сделаю упор на работу с XML данными, т.к. пытаясь разобраться с технологией AJAX, мне попадались лишь примеры работы с JSON форматом. О работе с ним читайте в продолжении к данному материалу, которое скоро будет подготовлено и опубликовано.
Предупреждаю! Эта публикация будет очень объемной, поэтому запаситесь терпением и приготовьтесь внимать смыслу рассматриваемых в ней примеров:
- Технология AJAX пример №1 — наипростейший пример, для ознакомления с азами AJAX.
- Технология AJAX пример №2 — отправка данных на сервер средствами AJAX.
- Технология AJAX пример №3 — отправка структуры данных с сервера в виде XML и работа с ними на стороне клиента.
Совместив все эти AJAX примеры воедино, мы получим реализацию обмена данными по AJAX технологии с форматом XML.
Давайте приступим к большой и трудоемкой работе. Но сначала ознакомьтесь с небольшим введением.
Содержание
- За интерактивностью будущее!
- Концепция технологии AJAX
- XML для AJAX
- AJAX пример №1 (Начало работы)
- AJAX пример №2 — отправка POST запроса на сервер
- Рассмотрим примеры AJAX запросов:
- Элементы кода, которые будут использованы в примерах.
- 1. GET AJAX запрос на чистом JavaScript
- 2. POST AJAX запрос на чистом JavaScript к PHP файлу на сервере
- 3. JSON AJAX POST запрос к серверу, на чистом Javascript
- 4. JQuery GET & POST AJAX запрос к PHP на сервере
- 5. Fetch GET на чистом Javascript
- 6. Запрос на чистом Javascript "Vanila" Fetch + POST метод
- 7. Fetch POST + JSON
- 8. Кросдоменный запрос JSONP Fetch + GET метод в github
За интерактивностью будущее!
Все больше появляется пользователей, приходящих на наши веб-ресурсы, не желающих наблюдать перезагрузку страницы, при каждом их действии. Сегодня мы можем встретить много примеров работы сервисов, вышедших из каменного века перезагрузки страниц. К ним можно отнести наши разнообразные социальные сети, или всевозможные сервисы для веб-мастеров.

Дать пользователю свободу действий – и не перезагружать страницу, стало возможным с развитием и внедрением AJAX технологии.
Концепция технологии AJAX
Как вы уже поняли, эта "золотая" технология позволяет нам обмениваться данными меду браузером и сервером в фоновом режиме, не обновляя страницу. Говоря по-умному, сей обмен является асинхронным.
Под асинхронностью в программировании я понимаю процесс выполнения второстепенного действия, не прекращая основное.
Под асинхронность относительно AJAX можно представить, что первостепенным действием является процесс отображения страницы браузером. А второстепенным – обработка запросов пользователя сервером. В момент выполнения операций на стороне сервера, благодаря аяксу, браузер ждет ответа, не ограничивая работу пользователя со страницей.
Итак, концепция такова: между браузером и сервером не переставая происходит обмен данными, которые:
- Вводятся в браузер средствами пользовательского интерфейса;
- Отправляются на сервер;
- Обрабатываются на сервере, возможно, заносятся в БД;
- В это время браузер ожидает возвращение ответа;
- Пока браузер ждет, он не прекращает работу пользователя;
- Дождавшись данных от сервера в определенном формате, обрабатывает их и выводит в контент HTML страницы.
Вы можете пронаблюдать представленный процесс на схематической иллюстрации работы описываемой технологии.

Осталось упомянуть важный момент: данные циркулирующие между сервером и браузером, должны отвечать определённым правилам форматирования. Такие правила обычно описывают два формата:
- XML(eXtensible Markup Language) — расширяемый язык разметки;
- JSON(JavaScript Object Notation) —текстовый формат основанный на JavaScript.
В редких случаях можно обойтись свободным текстовым форматом передачи данных, но это скорее исключение.
Технология AJAX расшифровывается как (Asynchronous JavaScript and XML), из этого можно сделать вывод, что разработчики в первую очередь предполагают использование формата XML. Но на деле, как показывает практика все чаще используется формат JSON, в силу своего минимализма. Другими словами – работать с обоими форматами можно одинаково хорошо, но один и тот же набор данных, представленный в JSON и XML, в первом будет иметь меньший размер. Следовательно, если JSON имеет меньший размер, то и передаваться он будет быстрее, чем XML.
XML для AJAX
Чуть позже мы рассмотрим работу AJAX, с использованием данных в формате XML. А пока давайте разберемся, что же такое XML формат.
Во-первых, надо четко понимать, что данный формат является текстовым и его можно запросто создать собственноручно, с помощью notepad++ любого другого текстового редактора.
Во-вторых, синтаксис XML очень похож на всем нам известный HTML.
Вот пример HTML разметки:
Мы видим, что любой открытый тег имеет свой закрывающий эквивалент. Также некоторые из тегов имеют атрибуты. Тут я никому Америку не открыл, и все понимают, что этот HTML документ будет интерпретирован браузером, который вместо тегов применит соответствующие им стили для текста.
Отличием XML будет то, что тэги, используемые, этим форматом нигде не зафиксированы, и могут принимать любые пользовательские названия и атрибуты. Но для обработки этих тэгов нужно будет написать соответствующий алгоритм, чтобы правильно распознать данные и их атрибуты.
Пример структуры в формате XML
Такими произвольными тегами и атрибутами как в этом примере можно запросто описать карточку пользователя, системы.
Запомните! Вся работа приложения на основе технологии AJAX сводится к обмену сложными структурами данных между клиентом (браузер), и сервером (web сервер).
Замечание 1: Можно, но совершенно не обязательно писать парсер самостоятельно ведь разработчики PHP создали все необходимые универсальные функции ("XML Parser Functions") для работы с XML форматом. Чтобы разобраться с ними нужно начать копать в сторону xml_parser_create().
Замечание 2: Технологией AJAX, тоже предусмотрен механизм отправки пользовательских данных.
Исходя из этих двух замечаний, можно прийти к выводу, о том, что для реализации полноценного веб приложения на AJAX, обменивающегося с сервером XML данными, нам требуется только связать вместе уже готовые инструменты.
Отлично, теперь мы представляем, что такое XML формат, и понимаем, что назначением его является передача сложных структур данных между сервером и клиентом. Следовательно, можем двигаться дальше.
AJAX пример №1 (Начало работы)
Приведенный ниже пример, позволит вам понять суть рассматриваемой нами технологии, и двигаться дальше к изучению более сложных примеров.
Исходный код HTML документа:
script type = "text/javascript" >
function startAjax ( url ) <
var request ;
if ( window. XMLHttpRequest ) <
request = new XMLHttpRequest ( ) ;
> else if ( window. ActiveXObject ) <
request = new ActiveXObject ( "Microsoft.XMLHTTP" ) ;
> else <
return ;
>
request. onreadystatechange = function ( ) <
switch ( request. readyState ) <
case 1 : print_console ( "
1: Подготовка к отправке. " ) ; break
case 2 : print_console ( "
2: Отправлен. " ) ; break
case 3 : print_console ( "
3: Идет обмен.." ) ; break
case 4 : <
if ( request. status == 200 ) <
print_console ( "
4: Обмен завершен." ) ;
document. getElementById ( "printResult" ) . innerHTML = "" + request. responseText + "" ;
> else if ( request. status == 404 ) <
alert ( "Ошибка: запрашиваемый скрипт не найден!" ) ;
>
else alert ( "Ошибка: сервер вернул статус: " + request. status ) ;
break
>
>
>
request. open ( ‘GET’ , url , true ) ;
request. send ( » ) ;
>
function print_console ( text ) <
document. getElementById ( "console" ) . innerHTML += text ;
>
script >
В коде HTML страницы мы создаем функцию startAjax() на языке JavaScript, позволяющую реализовать задуманные действия с AJAX’ом. Кстати, о действиях, во-первых мы хотим увидеть, как отрабатывает php скрипт, находящийся на сервере. Во-вторых, как возвращенная им информация появляется на страничке, без перезагрузки. Для этого в коде мы предусмотрели ссылку, по нажатию на которую запустится процесс всей демонстрации, консоль вывода действий JavaScript скрипта, а также блок для вывода результата.

Так вот, вернемся к создаваемой нами функции startAjax(), по строчкам я все описывать не стану, выделю лишь основные моменты, требуемые для представления происходящего.
- Создаем объект XMLHttpRequest позволяющий получать данные с сервера в фоновом режиме.
- Если используется IE (Браузер — Internet Explorer) тогда вместо вышеупомянутого объекта XMLHttpRequest, создаем объект ActiveXObject, смысл у них единый, отличие только в индивидуальности для IE.
- Обрабатываем все 4-ре статуса состояния запроса. Созданный запрос он же объект request, в процессе отправкиполучения данных может принимать четыре состояния (1 — подготовка к отправке, 2 — отправлен, 3 — идет обмен, 4 — получен ответ.)
- В случае 4-го статуса, при получении ответа от сервера, происходит проверка на тип ответа 200 — "OK" или 404 — "Not Found".
- Событие request.open() — открывает соединение с сервером с указанием метода передачи данных, адресом запроса, и флагом асинхронности. Указав флаг как false, мы получим в результате обычную перезагрузку страницы.
Кликнув на ссылку, мы пронаблюдаем успешное выполнение простого AJAX запроса.

Разумеется, такое сообщение мы получим только после того как разместим на сервере, в той же папке, что и саму html страничку, скрипт handler_script.php:
Скрипт не мудрый, тем не менее, его содержимого достаточно для демонстрации.
Ну вот, с азами разобрались, перейдем от простого к сложному. Рассмотрим пример использования технологии AJAX по прямому её назначению, а именно с пересылкой данных в виде XML.
AJAX пример №2 — отправка POST запроса на сервер
Переходя ко второму примеру, давайте уясним тот факт, что любой из запросов, отправляющийся на сервер, может иметь один из таких типов данных:
- GET — передаёт пользовательских данные заданному ресурсу по URI.
- POST — передаёт пользовательских данные заданному ресурсу по протоколу.
- HEAD — аналогичен методу GET, за исключением того, что сервер ничего не посылает в информационной части ответа.
- TRACE — возвращает всё, что было введено при запросе, включая HTTP-заголовки.
- DELETE — Удаляет указанный ресурс.
- PUT — загружает содержимого запроса на указанный в запросе URI.
Причем это относится не только к технологии AJAX, а в принципе ко всему протоколу HTTP. Самыми распространенными являются два типа GET и POST, как правило, они широко используемы в отправке данных на сервер посредствам HTML элемента form. Именно с этими типами запроса я и приведу примеры работы веб приложения на АЯКСЕ.
Для того чтобы с помощью АЯКС технологии отправить POST запрос, нужно использовать три метода объекта request:
- open – открывает соединение с сервером с указанием метода передачи данных.
- setRequestHeader — устанавливает заголовок запроса.
- send — отправляет запрос.
Откройте код примера №1 и замените в нем строки:
27.02.2019

AJAX запрос — это обращение с клиентской стороны т.е. от браузера к серверу, не перезагружая страницы. AJAX – это технология JavaScript для обращения к серверу без перезагрузки страницы.
Рассмотрим примеры AJAX запросов:
XMLHttpRequest , — экземпляр данного класса включает в себя набор методов для работы в протоколах HTTP и HTTPS. AJAX запрос, — это комплекс выполняемых задач, в режиме «запрос-ответ».
Каждый запрос к серверу, включает в себя ->
- Указание метода HTTP (GET POST)
- Запрашиваемого URL (пути до файла на сервере, который будет обрабатывать наш запрос)
- Установка заголовков на пример: "application/x-www-form-url" или "application/x-www-form-urlencoded" или "application/json" или "text-plain"
- Данные передаваемые на сервер (тело запроса)
Каждый ответ от сервера включает в себя
- Код статуса (успешно или нет отработала сторона сервера)
- Заголовки HTTP/HTTPS
- Данные передаваемые от сервера к клиенту (браузеру)
Элементы кода, которые будут использованы в примерах.
XMLHttpRequest , — это класс, для работы AJAX.
request – это переменная или константа в которой будет хранится, — экземпляр класса XMLHttpRequest, объект с набором методов.
url – это путь до файла на сервере, который будет обрабатывать наш запрос. В примерах с GET методом, в нем будут передаваться данные со стороны клиента.
.open() – это метод где мы задаем, первым параметром, — метод передачи данных, а вторым url.
.setRequestHeader() – это метод для указания передаваемых заголовков, здесь мы можем указать что данные идут в url либо закрытым способом, либо хотим получить данные от сервера в json формате.
.send() – это последний этап создания http запроса. С помощью него также можно передать тело запроса т.е. данные от браузера к серверу. Можно не чего не передавать или прямо указать null.
onreadystatechange – это событие которое случится когда нам придет ответ от сервера.
readyState – это метод экземпляра, который сообщает статус HTTP-запроса, вот возможные значения которые он может дать:
| Значение | Описание |
| 0 | Метод open() не вызван |
| 1 | Метод open() вызван |
| 2 | Получены заголовки ответа |
| 3 |
Получено тело ответа
status или statusText – возвращают статус http заголовков, нам нужен ответ 200. Хотя бывают и 404 или 500.
.responseText – данные, которые придут от сервера в виде строки.
.response – данные вернуться в json формате, тут как бы мы преобразуем сразу в объект, и дальше работаем уже как с объектом.
.text() – используется в запросе fetch, возвращает строку.
.json() – используется в запросе fetch, возвращает json обращенный в объект.

1. GET AJAX запрос на чистом JavaScript
Делаем запрос на чистом JavaScript, например к файлу ajax_quest.php, который находится на сервере, и будет возвращать то что мы ему передали.

2. POST AJAX запрос на чистом JavaScript к PHP файлу на сервере
Принцип такой же как и у GET запроса, но не забываем что GET запросом данные отправляются открыто. У POST запроса данные скрыты, и в большинстве своем желательно использовать POST запросы.
3. JSON AJAX POST запрос к серверу, на чистом Javascript
Запрос на чистом Javascript. Получаем данные в JSON формате.
4. JQuery GET & POST AJAX запрос к PHP на сервере
Работаем с сервером через фреймворк JQuery.
5. Fetch GET на чистом Javascript
Fetch обертка над XHR
6. Запрос на чистом Javascript "Vanila" Fetch + POST метод
7. Fetch POST + JSON
Данный метод сейчас мало какой браузер поддерживает. Но есть костыли. Этот код работает, попробуйте разобраться что к чему. С удовольствием узнаю как лучше тут поступать.
8. Кросдоменный запрос JSONP Fetch + GET метод в github
Кросдоменный AJAX запрос в репозиторий github. Репозиторий возвращает json объект с именами.





