我知道您可以做到:
myUrl.searchParams.set('param1', 'value');
myUrl.searchParams.set('param2', 'value');
...
我想做的更像是:
myUrl.searchParams.set({
param1: 'value',
param2: 'value
});
但这是行不通的。
我看到in the docs您可以使用
URLSearchParams
类执行此操作:myParams = new URLSearchParams({
param1: 'value',
param2: 'value
});
但是我不知道是如何使用它的。这些不起作用:
myUrl.searchParams = myParams;
要么
myUrl.searchParams.set(myParams);
我尝试过的其他事情也没有。除非我只是疯了,否则我找不到在哪里显示如何执行此操作in the docs。
最佳答案
您有正确的想法,这不是错字,但您需要将params对象分配给search
而不是searchParams
。
myUrl.search = myParams
myURL.searchParams
对象是new URL()
自动创建的URLSearchParams的实例。您可以使用其方法,但是...可悲的是,一旦创建了该对象,现在一次设置多个参数为时已晚,因为只有构造函数支持该方法,而其方法都不支持。逻辑上认为您应该能够自己创建一个新实例并将其分配给
searchParams
属性。但是他们决定将该属性设置为只读。我认为这会让很多人感到困惑,这是不必要的直觉。好消息是,
myParams.search
是可写的,它将很高兴地序列化myParams
对象。const myUrl = new URL('https://example.com/');
myUrl.search = new URLSearchParams({
param1 : 'value',
param2 : 'value'
});
myUrl.toString();
// https://example.com/?param1=value¶m2=value
我希望有人支持将对象传递给myParams#set()的能力,并且有一天,我们在URL上只能拥有一个
search
相关属性。关于javascript - 使用“Node URL”模块,如何一次设置所有搜索参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47026827/