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