url网址中的中文会被编码,下面方法可以得到一个对象格式的完整信息
例如url为
http://localhost:8080/#/login?username=111&password=%E5%88%89Ba&list=%26C%80A
// 获取输入的url?后面的字符串
let urlParams = window.location.href.split('?')[1]
// URLSearchParams返回的对象上有许多方法可以使用
let urlParamsFun = new URLSearchParams(urlParams)
URLSearchParams方法有
append():增加一个新的键值参数
delete(key):删除对应的键值
get(key):返回第一个值
getAll(key):返回所有值组成的数组
has(key):是否存在某个键值
set(key, value):设置指定的键值对参数
sort():按键名进行排序
toString():返回查询字符串
keys():返回包含所有键名的迭代器对象
values():返回包含所有值的迭代器对象
entries():返回包含所有键和值的迭代器对象,主要要用到这个方法!
开始解析
let obj = {}
for (let k of urlParamsFun.entries()) {
// 注意特殊情况:list为数组为对象时,要对第二层decodeURIComponent再解码一下,不然得到的还是加密形式的
if (['list'].includes(k[0])) {
obj[k[0]] = JSON.parse(decodeURIComponent(k[1]))
} else {
obj[k[0]] = k[1]
}
}
console.log(obj).
// { username:'111', password: 'admin', list: [{ a:1 },{ b:2 }] }
// 模拟的数据形式,不是上面解码出来的