使用URLSearchParams和$ .param()替换url请求中的数组参数

时间:2020-05-05 22:35:39

标签: javascript jquery get request

我想在单击数组元素之一的链接时更改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获取整个数组而不使用任何循环。
  2. 在数组上使用URLSearchParams.toString()有什么技巧。

1 个答案:

答案 0 :(得分:1)

您需要做的是删除foo[]条目,然后从.getAll('foo[]').append()迭代values数组。

例如

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()))