我知道您可以做到:

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&param2=value


我希望有人支持将对象传递给myParams#set()的能力,并且有一天,我们在URL上只能拥有一个search相关属性。

关于javascript - 使用“Node URL”模块,如何一次设置所有搜索参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47026827/

10-09 15:16