ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку
logo

Отправка данных формы с помощью POST и XMLHttpRequest в JS

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
var xhr = new XMLHttpRequest();
xhr.open("POST", 'your-endpoint-url');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ param1: 'value1', param2: 'value2' }));

Когда вы используете XMLHttpRequest для отправки данных методом POST, вы должны сериализовать ваш запрос с помощью JSON.stringify(). Не забывайте задать Content-Type значение 'application/json', чтобы сервер мог корректно обработать передаваемые данные.

Разбираем код

Установка заголовков запроса

При отправке запросов методом POST важно явно указать серверу, какой тип содержимого передается через MIME-тип 'application/json'. Если вы передаете данные формы, тип можно изменить на 'application/x-www-form-urlencoded'.

Кодирование URL и подготовка данных к отправке

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

JS
Скопировать код
function convertParams(params) {
  return Object.keys(params)
    .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
    .join('&');
}
// Вот так данные преобразуются в строку запроса.

Отслеживание изменений состояния

onreadystatechange позволяет отслеживать статус выполнения запроса. Завершение можно проверить по условию readyState == 4, после чего обрабатывать полученный ответ в зависимости от статуса this.status.

JS
Скопировать код
xhr.onreadystatechange = function() {
  if (this.readyState == 4) {
    if (this.status == 200) {
      // Отлично, запрос успешно выполнен!
    } else {
      // Во время выполнения запроса произошла ошибка.
    }
  }
};

Удобство использования FormData

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

JS
Скопировать код
var formData = new FormData();
formData.append('param1', 'value1');
formData.append('param2', 'value2');
// Теперь данные готовы к отправке.
xhr.send(formData);

Не забывайте об обработке ошибок

Как в любом хорошем алгоритме, должны присутствовать как моменты успеха, так и неудач. В XMLHttpRequest предусмотрены обработчики событий для успешных операций и ошибок.

JS
Скопировать код
xhr.onload = function() { // Запрос успешно выполнен!
  console.log(this.responseText);
};

xhr.onerror = function() { // Произошла ошибка!
  console.error("Похоже, что-то пошло не так с подключением!");
};

Асинхронность XMLHttpRequest

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

Визуализация

Markdown
Скопировать код
🚀 Клиент (Браузер)
   |
   |  (1) Подготовка и инициализация POST-запроса с данными
   v
💻 Сервер
   |
   |  (2) Обработка полученных данных
   |
   |  (3) Отправка HTTP-ответа
   v
🚀 Клиент (Браузер) – (4) Обработка ответа
  • (1) Подготовка данных: let data = JSON.stringify({ key: 'value' });
  • (2) Внедрение запроса: let xhr = new XMLHttpRequest();
  • (3) Настройка и отправка запроса:
JS
Скопировать код
xhr.open('POST', 'url', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(data);
  • (4) Обработка ответа: xhr.onload = function() { /* обработать ответ */ };

Продвинутое применение

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

Работаем с JSON

При взаимодействии с API, которые ожидают данные в формате JSON, очень важно правильно сериализовать ваши данные.

JS
Скопировать код
xhr.send(JSON.stringify({ user: 'JohnDoe', password: '12345' }));

Не только для отправки данных

XMLHttpRequest — это не только инструмент для отправки данных. Он также может управлять процессом загрузки и в некоторых случаях позволять даже прервать запрос.

JS
Скопировать код
xhr.upload.onprogress = function(event) {
  console.log(`Загружено ${event.loaded} из ${event.total} байт`);
  // Статус загрузки данных.
};

xhr.abort(); // Прерывание отправки данных.

Слово о безопасности

Забота о безопасности — это неотъемлемая часть работы с XMLHttpRequest. Необходимо избегать передачи конфиденциальных данных и использовать безопасные токены или аутентификацию OAuth.

Полезные материалы

  1. XMLHttpRequest – Web APIs | MDN — подробное руководство по использованию XMLHttpRequest.
  2. javascript – Отправка POST-данных при помощи XMLHttpRequest – Stack Overflowпрактические примеры использования на Stack Overflow.
  3. XMLHttpRequest — хорошо структурированный гид по XMLHttpRequest.
  4. Отправка форм с помощью JavaScript – Учебник по веб-разработке | MDN — информация об отправке форм при помощи JavaScript.
  5. GitHub – axios/axios: HTTP клиент на основе промисов для браузера и node.js — рассмотрите использование Axios в качестве альтернативы XMLHttpRequest.