前端传给接口的参数携带“#“后被浏览器默认行为删除后面的参数

6 阅读1分钟
  • 原因:

    • 浏览器默认行为会删除# 后的内容(称为 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()