Преобразование данных формы в строку запроса в Javascript

Пройдите тест, узнайте какой профессии подходите

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

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

Для создания строк запросов в JavaScript рекомендуется использовать URLSearchParams:

JS
Скопировать код
const params = new URLSearchParams({ search: 'books', page: '2' });
const queryString = params.toString(); // "search=books&page=2" готово без лишних усилий!

Этот интерфейс автоматически кодирует параметры, предотвращая возможные ошибки, например, пропущенное кодирование пробелов. Добавление параметров осуществляется через params.append('key', 'value').

Кинга Идем в IT: пошаговый план для смены профессии

Работа со специальными символами

В URL могут присутствовать специальные символы, которые URLSearchParams обрабатывает автоматически. Однако, при необходимости более детального контроля, используйте encodeURIComponent():

JS
Скопировать код
const key = encodeURIComponent('param with spaces');
const value = encodeURIComponent('value/with?special=characters');
const query = `${key}=${value}`; // Получаем "param%20with%20spaces=value%2Fwith%3Fspecial%3Dcharacters"

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

Обработка объектов в цикле

Чтобы сформировать строку запроса из объекта с несколькими парами ключ-значение, можно использовать следующий подход:

JS
Скопировать код
const paramsObject = { search: 'books', genre: 'fiction', author: 'Jane Doe' };
const queryString = Object.keys(paramsObject)
  .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(paramsObject[key])}`)
  .join('&'); // Каждая пара ключ-значение становится звеном в цепи нашего запроса.

jQuery как альтернатива

Если вы используете jQuery, она может сгенерировать строки запросов за вас:

JS
Скопировать код
const paramsObject = { search: 'books', page: '2' };
const queryString = $.param(paramsObject); // jQuery занимается генерацией строки запроса.

Здесь jQuery.param() становится ключом к решению.

Индивидуальные решения для нестандартных задач

В некоторых случаях может быть необходимо индивидуальное решение для формирования строк запросов:

JS
Скопировать код
function buildUrl(params) {
  return Object.keys(params)
    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
    .join('&'); // Это выражает ваш индивидуальный подход к решению задачи.
}

const queryString = buildUrl({ search: 'books', page: '2' });
// "search=books&page=2" – результат работы нашей функции.

Благодаря современному JavaScript

Современный JavaScript предоставляет удобные инструменты для решения этой задачи. Просто убедитесь, что ваша целевая аудитория использует поддерживаемые браузеры, или воспользуйтесь транспиляцией через Babel:

JS
Скопировать код
const queryString = Object.entries({ search: 'books', page: '2' })
  .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
  .join('&'); // Комбинирование методов Map и Join для решения данной задачи.

Отладка – секрет успешного кода

Не забывайте проверять свои строки запросов в ходе отладки с помощью console.log():

JS
Скопировать код
console.log(queryString); // Итог нашей работы – "search=books&page=2"

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

Представьте пары ключ-значение в виде бусин на нити, каждая из которых несет определенные данные и имеет свое уникальное имя:

Markdown
Скопировать код
Строка: [Бусинка(key=value), Бусинка(key=value), Бусинка(key=value)...]

И в результате, вы получаете аккуратную строку запроса:

Markdown
Скопировать код
"key1=value1&key2=value2"

Это ваше уникальное ожерелье параметров в URL. 📿✨

Кодирование сложных объектов

Сложные данные, такие как массивы или вложенные объекты, требуют особого подхода к кодированию:

JS
Скопировать код
const complexData = {
  colors: ['red', 'green', 'blue'],
  settings: { level: '1', silent: 'true' },
};

const queryString = Object.keys(complexData)
  .map(key => {
    if (Array.isArray(complexData[key])) {
      return complexData[key]
        .map(value => `${key}=${encodeURIComponent(value)}`)
        .join('&');
    }
    return `${key}=${encodeURIComponent(JSON.stringify(complexData[key]))}`;
  })
  .join('&');
// Строка "colors=red&colors=green&colors=blue&settings=%7B%22level%22%3A%221%22%2C%22silent%22%3A%22true%22%7D" это результат корректного кодирования.

Библиотеки – сохраняйте свое время!

Не нужно изобретать колесо, если есть библиотеки, предлагающие нужные функции:

JS
Скопировать код
// Используя qs
const queryString = qs.stringify({ search: 'books', filters: { genre: 'fiction', author: 'Jane Doe' } });

// Используя URI.js
const uri = new URI();
uri.addSearch({ search: 'books' });
uri.addSearch('filters', { genre: 'fiction', author: 'Jane Doe' });
const queryString = uri.query();

Библиотеки снимают с вас тяжелую нагрузку работы.

Внимание! Совместимость с браузерами

URLSearchParams может не поддерживаться в некоторых старых браузерах. В этом случае стоит рассмотреть использование полифилов или других методов.

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

  1. MDN Web Docs – URLSearchParams — все, что вам нужно знать для создания строк запросов на JavaScript.
  2. CSS-Tricks – Получение переменных URL с помощью JavaScript — набор кода для расширения вашего инструментария.
  3. npm – qs — документация библиотеки для работы со строками запросов.
  4. Stack Overflow – Как сериализовать объект в параметры запроса URL? — реальные примеры от других разработчиков.
  5. URI.js — официальная документация библиотеки для работы с URL на JavaScript.
  6. MDN Web Docs – URL — подробный ресурс по работе с URL в JavaScript.
  7. Блог Дмитрия Павлютина – Парсинг URL на JavaScript — детальное рассмотрение парсинга URL на JavaScript.