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

Umbrella JS — это компактная библиотека для работы с DOM и AJAX, предоставляющая простой и лаконичный синтаксис. Одной из ключевых возможностей является отправка данных на сервер, включая JSON-формат, который является стандартом для обмена информацией в веб-приложениях.

Основы отправки AJAX-запросов

Метод u.ajax() позволяет выполнять асинхронные запросы к серверу. Он поддерживает различные HTTP-методы, включая POST, GET, PUT, DELETE, а также передачу данных в формате JSON.

Пример базового запроса:

u.ajax({
    url: '/api/data',
    method: 'POST',
    data: JSON.stringify({ name: 'John', age: 30 }),
    headers: {
        'Content-Type': 'application/json'
    },
    success: function(response) {
        console.log('Ответ сервера:', response);
    },
    error: function(status, statusText) {
        console.error('Ошибка запроса:', status, statusText);
    }
});

Ключевые моменты:

  • url — адрес, на который отправляется запрос.
  • method — HTTP-метод. Для отправки JSON чаще всего используется POST.
  • data — данные, которые будут отправлены. JSON необходимо сериализовать с помощью JSON.stringify().
  • headers — заголовки запроса. Для JSON обязательно указывать 'Content-Type': 'application/json'.
  • success — функция, вызываемая при успешном ответе сервера.
  • error — функция обработки ошибок запроса.

Автоматическая обработка JSON

Umbrella JS позволяет обрабатывать JSON-ответы автоматически. Если сервер возвращает корректный JSON с заголовком Content-Type: application/json, библиотека преобразует ответ в объект JavaScript, передаваемый в success:

u.ajax({
    url: '/api/user',
    method: 'GET',
    success: function(data) {
        console.log('Имя пользователя:', data.name);
        console.log('Возраст:', data.age);
    }
});

В этом примере data уже является объектом, а не строкой, что упрощает работу с полученными данными.

Отправка форм в формате JSON

Часто необходимо отправлять данные формы в формате JSON. Umbrella JS упрощает сбор значений полей и конвертацию их в объект:

const formData = {};
u('form#userForm').find('input, select, textarea').each(function(el) {
    formData[el.name] = el.value;
});

u.ajax({
    url: '/api/save-user',
    method: 'POST',
    data: JSON.stringify(formData),
    headers: { 'Content-Type': 'application/json' },
    success: function(response) {
        console.log('Данные успешно сохранены:', response);
    }
});

Особенности:

  • Используется метод find() для выбора всех полей формы.
  • Метод each() позволяет перебрать элементы и собрать значения в объект.
  • JSON-строка создаётся через JSON.stringify() перед отправкой.

Обработка ошибок и статусов ответа

Umbrella JS предоставляет доступ к статусу ответа сервера и тексту ошибки. Это важно для обработки возможных проблем, таких как неверный формат данных или ошибки на сервере:

u.ajax({
    url: '/api/update',
    method: 'POST',
    data: JSON.stringify({ id: 1, value: 'test' }),
    headers: { 'Content-Type': 'application/json' },
    success: function(data) {
        if (data.success) {
            console.log('Обновление прошло успешно');
        } else {
            console.warn('Ошибка сервера:', data.message);
        }
    },
    error: function(status, statusText) {
        console.error(`Запрос завершился с кодом ${status}: ${statusText}`);
    }
});

Асинхронная отправка и промисы

Хотя Umbrella JS изначально использует колбэки, библиотеку можно интегрировать с промисами для более современного подхода:

function sendJSON(url, payload) {
    return new Promise((resolve, reject) => {
        u.ajax({
            url: url,
            method: 'POST',
            data: JSON.stringify(payload),
            headers: { 'Content-Type': 'application/json' },
            success: resolve,
            error: (status, statusText) => reject(new Error(`${status}: ${statusText}`))
        });
    });
}

sendJSON('/api/items', { name: 'Item 1', quantity: 5 })
    .then(response => console.log('Ответ сервера:', response))
    .catch(err => console.error('Ошибка запроса:', err));

Использование промисов позволяет комбинировать несколько запросов через Promise.all или использовать async/await для более читаемого кода:

async function saveUser() {
    try {
        const response = await sendJSON('/api/save-user', { name: 'Alice', age: 25 });
        console.log('Сохранено:', response);
    } catch (err) {
        console.error('Ошибка:', err);
    }
}

saveUser();

Советы по отправке JSON

  • Всегда указывать Content-Type: application/json при отправке объектов.
  • Использовать JSON.stringify() для сериализации данных.
  • Проверять, что сервер корректно обрабатывает JSON-запросы.
  • Для сложных форм использовать перебор всех элементов с их последующей упаковкой в объект.
  • Обрабатывать как успешные, так и ошибочные ответы, чтобы избежать скрытых сбоев.

Umbrella JS делает работу с JSON-данными максимально простой и понятной, обеспечивая лаконичный синтаксис для любых AJAX-операций и позволяя легко интегрировать асинхронные запросы в современные веб-приложения.