-
原因:
- 浏览器默认行为
会删除#
后的内容(称为 fragment)不会发送到服务器 - 例如:
https://site.com/page#section1 会删除section1参数
解决方法:
- 浏览器默认行为
使用URLSearchParams()正确处理URL参数
URLSearchParams()主要功能:
自动编码:自动对特殊字符进行百分比编码
参数管理:轻松添加、删除、获取参数
格式处理:生成符合 URL 标准的查询字符串
示例:
const rawQuery = "serialNumber=123#123&pageNo=1&pageSize=10";
// 解析为URLSearchParams
const params = new URLSearchParams(rawQuery);
// 重建正确编码的查询字符串
//如果不需要转对象 可以直接使用.toString()解析
const safeQuery = new URLSearchParams(
Object.fromEntries(
[...params].map(([k, v]) => [k, v])
)
).toString();
const url = `/stat/lock/access?${safeQuery}`;
console.log(url);
// 输出: /stat/lock/access?serialNumber=123%23123&pageNo=1&pageSize=10
常用方法:
方法 | 描述 | 示例 |
---|---|---|
append() | 添加新参数 | params.append('key', 'value') |
set() | 设置/替换参数 | params.set('key', 'new-value') |
get() | 获取参数值 | params.get('key') |
getAll() | 获取所有同名参数 | params.getAll('key') |
delete() | 删除参数 | params.delete('key') |
has() | 检查参数是否存在 | params.has('key') |
toString() | 生成查询字符串 | params.toString() |