我尝试获取URL参数 nr
,但始终得到 false
。
var url = window.location.href;
let params = new URLSearchParams(url.search);
let nr = params.has('nr')
这个错误是什么?
我尝试获取URL参数 nr
,但始终得到 false
。
var url = window.location.href;
let params = new URLSearchParams(url.search);
let nr = params.has('nr')
这个错误是什么?
使用
var url = window.location;
let params = new URLSearchParams(url.search);
let nr = params.has('nr')
因为window.location是一个带有.search
属性的Location对象
而window.location.href是一个字符串,没有.search
属性
因此你的url.search
是undefined
我可以用与Location
类似的URL
来演示这一点
let loc = new URL('http://example.com/?nr=1');
// loc is a placeholder for your window.location
let url = loc.href;
// here, url.search would be window.location.href.search
let params = new URLSearchParams(url.search);
let nr = params.has('nr')
console.log(nr);
url = loc;
// here, url.search would be window.location.search
params = new URLSearchParams(url.search);
nr = params.has('nr')
console.log(nr);
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m,key,value) {
vars[key] = value;
});
return vars;
}
var params = getUrlVars();
console.log(params["nr"]);
来自 https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams
URLSearchParams 构造函数不会解析完整的 URL。但是,如果存在,则会从字符串中删除初始的 ?。
因此,您应该只提供查询参数字符串。
例如,如果您的 window.location.href 是
https://dev59.com/acHqa4cB1Zd3GeqPyF1U?query=1&query_1=2&many_queries=3
然后,您应该仅将URLSearchParams类传递给查询参数,即
query=1&query_1=2&many_queries=3
window.location.href
。 - Sid.has()
方法会返回一个布尔值而不是参数本身。如果你需要获取参数本身,需要使用get()
方法。请参考文档。 - SakisTsalk