Заменить параметр массива в URL-запросе с помощью URLSearchParams и $ .param () - PullRequest
1 голос
/ 06 мая 2020

Я хотел бы изменить URL-адрес запроса, щелкнув ссылку на один из элементов массива. Например: от

?foo[]=1&foo[]=2

до

?foo[]=1&foo[]=3

Я использую URLSearchParams с методами .getAll('foo[]'), а затем .set('foo[]', array) Наконец, я использую jquery метод param() для генерации правильная строка URL-адреса (поскольку я не смог использовать URLSearchParams.toString() с массивом - результат всегда foo [] = 1 & 3).

Это работает, но если бы у меня был другой параметр в запросе Я хотел бы сохранить, становится сложно восстановить URL-адрес.

Например:

?foo[]=1&foo[]=2&bar=3&bar[]=4&page=1

до

?foo[]=1&foo[]=3&bar=3&bar[]=4&page=1

У меня много параметров, поэтому я бы хотелось бы избежать перестройки всего объекта запроса для перехода к $.param(). Итак:

  1. Есть ли возможность получить весь массив из URLSearchParams без использования l oop.
  2. Есть ли какой-нибудь трюк для использования URLSearchParams.toString() с массивами.

1 Ответ

1 голос
/ 06 мая 2020

Что вам нужно сделать, так это удалить запись foo[], затем перебрать массив значений из .getAll('foo[]') и .append().

Например,

const usp = new URLSearchParams([
  ['foo[]', 1],
  ['foo[]', 2],
  ['bar', 3],
  ['bar[]', 4],
  ['page', 1]
])

console.info('original:', decodeURIComponent(usp.toString()))

// get all 'foo[]' entries
const foos = usp.getAll('foo[]')
// incremenent the last value
foos[foos.length - 1]++

// remove 'foo[]'
usp.delete('foo[]')

// iterate values and append
foos.forEach(foo => usp.append('foo[]', foo))

console.info('updated:', decodeURIComponent(usp.toString()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...