Принцип отправки данных может отличаться в различных ситуациях. Рассмотрим эти ситуации.
- Отправка GET-запроса
- Кодирование параметров
- POST-запросы
- Отправка форм. FormData
- Рассмотрим примеры 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
Отправка GET-запроса
GET-запрос характеризуется тем, что данные могут отправляться в строке запроса:
Для отправки берем свойства объекта user и формируем из их значений сроку с параметрами: «name=» + user.name + «&age=»+user.age . Затем эта строка добавляется к строке запроса в методе open(«GET», «http://localhost:8080/postdata.php?»+body)
Предполагается, что данные отправляются скрипту на языке php postdata.php, который может иметь, например, следующее содержание:
Конкретная технология стороны сервера тут не важна. И в качестве тестирования можно взять любую другую технологию. Например, ASP.NET MVC. Метод контроллера в ASP.NET MVC, который принимает данные, мог бы выглядеть следующим образом:
Кодирование параметров
Все отправляемые в GET-запросе параметры разделяются знаком амперсанда(&). Но что, если какой-нибудь параметр имеет знак амперсанда. Например,
В этом случае при получении параметров скрипт на стороне сервера может неправильно обработать данные и неправильно извлечь параметры. Поэтому, чтобы кодировать все передаваемые данные, нужно применять функцию encodeURIComponent() :
При этом строка «Tom&Tim» будет кодирована в следующую строку: «Tom%26Tim».
При необходимости мы можем выполнить обратное декодирование с помощью функции decodeURIComponent() :
POST-запросы
Отправка данных в POST-запросах будет немного отличаться:
Для отправки данных методом POST надо установить заголовок Content-Type с помощью метода setRequestHeader() . В данном случае заголовок имеет значение application/x-www-form-urlencoded .
Отправка форм. FormData
Начиная со спецификации XMLHttpRequest2 в JavaScript появился новый объект — FormData , который позволяет сериализовать данные формы для ее последующей отправки. При этом нам даже необязательно создавать форму в коде html, мы можем создать ее динамически в JavaScript:
Для добавления данных у объекта FormData используется метод append(‘имя_параметра’, значение) . При этом никакие заголовки указывать не надо.
Также мы можем определить форму в html и использовать ее для отправки:
Для сериализации всех полей формы нам достаточно передать объект формы в конструктор FormData: var formData = new FormData(form);
| Поиск по форуму |
| Расширенный поиск |
| К странице. |
Чтобы написать AJAX-приложение, нужно уметь связываться с сервером. Технологии, которые обеспечивают такую связь, называют транспортами. Разные транспорты имеют разные возможности и ограничения.
Объект XMLHTTPRequest — низкоуровневая основа большинства AJAX-приложений. Знание его методов, свойств и особенностей не только помогает писать приложения на низком уровне с минимумом javascript-кода, но и позволяет понять, что происходит внутри фреймворков, которые, увы, часто несовершенны или тянут много лишнего. читать дальше »
Запросы способом Script подразумевают только GET и имеют сложности с отслеживанием ошибок. Но зато — их можно делать на любые домены,
что и составляет основную область применения этого транспорта. читать дальше »
Этот транспорт — пожалуй, самый универсальный и мощный, но и тонкостей в нем — больше всех
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 | |
| 4 | Передача ответа выполнена |
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 объект с именами.
