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

Добавление параметра в URL без обновления страницы: pushState

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

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

Присвоение нового параметра к URL без обновления страницы осуществляется с использованием кода:

JS
Скопировать код
history.pushState(null, '', `${location.href}&newParam=value`);

Данный кусок кода позволяет активировать функцию history.pushState(), которая внесет newParam=value в текущий URL.

Если вы стремитесь к более элегантному подходу, используйте объекты URL и URLSearchParams. Они существенно упрощают работу с параметрами:

JS
Скопировать код
const url = new URL(window.location);
url.searchParams.append('newParam', 'value');
window.history.pushState({}, '', url);

Таким образом, newParam будет вставлен как параметр запроса, обеспечивая автоматическое кодирование и согласованность структуры URL.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Усовершенствованное управление URL

Используя window.location и API URL, мы можем тонко редактировать URL, разделяя его на протокол, хост и путь, чтобы аккуратно вставить параметры.

Бесшовные обновления с помощью replaceState

Метод history.replaceState() идентичен pushState(), но он модифицирует URL без добавления новой записи в историю браузера. Это особенно полезно для фильтрации и поиска, чтобы не нагружать историю браузера излишними изменениями.

JS
Скопировать код
window.history.replaceState(null, null, '?newParam=value');

Кодирование параметров: безопасность в первую очередь

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

JS
Скопировать код
const paramKey = encodeURIComponent('a bit naughty param&name');
const paramValue = encodeURIComponent('value with spaces, or worse');
history.pushState(null, '', `${location.href}?${paramKey}=${paramValue}`);

Таким образом, вы обеспечиваете соответствие структуры URL стандартам.

Применение индивидуального подхода с помощью сложного обновления

Если searchParams не отвечает всем вашим требованиям, вы можете прибегнуть к непосредственному управлению строками в сочетании с pushState():

JS
Скопировать код
let url = new URL(window.location);
let newUrl = `${url.protocol}//${url.host}${url.pathname}?${fancyUrlConcoctionFunction()}`;
window.history.pushState(null, '', newUrl);

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

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

Процесс добавления параметра в URL можно представить как прицепление вагона к поезду в движении, не останавливая его ход:

Markdown
Скопировать код
Текущий поезд (🚂): [Локомотив, 🚃 Вагон A, 🚃 Вагон B]

Добавляем параметр: Новый Вагон (🔗 Param) прицеплен к поезду

Markdown
Скопировать код
До: 🚂🚃🚃  // Поезд (URL) движется как обычно
После: 🚂🚃🚃🔗🚃  // Параметр (новый вагон) добавлен безоблачно

Поезд (URL) продолжает движение без отклонения от заданного ритма, включая нового пассажира (параметр).

Группирование параметров

Для удобства добавления нескольких параметров одновременно используйте метод $.param() из jQuery:

JS
Скопировать код
let params = { first: 'value1', second: 'value2' };
let queryString = $.param(params);
history.pushState(null, '', `${location.href}?${queryString}`);

Таким образом формируется правильный формат и кодировка строки запроса.

Устранение проблем с "?"

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

JS
Скопировать код
function updateUrlParameter(param, value) {
  const url = new URL(window.location);
  url.searchParams.set(param, value);
  window.history.pushState(null, '', url);
}

Данная функция добавляет или обновляет параметры, сохраняя чистоту URL.

Большая картина

Для интерактивных интерфейсов важно поддерживать актуальность URL, соответствующую текущему состоянию. Методы pushState() и replaceState() могут привязываться к действиям пользователя, таким как нажатие кнопок, применение фильтров, поиск, создавая интерактивное пространство в приложении.

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

  1. Использование History API – Веб API | MDN — подробное рассмотрение манипулирования историей браузера.
  2. Применение HTML5 History API | CSS-Tricks — обучающее руководство по pushState.
  3. History: метод pushState() – Веб API | MDN — справочник по pushState().
  4. Получение параметров URL с помощью JavaScript — SitePoint — управление параметрами URL на чистом JavaScript.
  5. JavaScript Window Location | w3schools — разъяснение объекта location в JavaScript Window.