遇到的问题之“使用get请求时,请求参数中存在#导致后端request获取不到值”
一.问题
使用get请求时,请求参数中存在#导致后端request获取不到值
发出参数带#的请求

后端接收不到SKU的值,连后面platformId的值都没有了

二.原因
1、有些符号[参数包含有特殊字符(%、#、&)]在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。
编码的格式为:%+字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。
例如 空格的编码值是"%20"。

2、url参数有长度限制,参数太长就会显示不全
三.解决方案
js采用encodeURIComponent技术进行编译,将#号转化为%23值
测试方案
const skus = "ZZY210730610RDS,#C262E";
console.log(encodeURIComponent(JSON.stringify(skus.replace(/\#/g,"%23"))));
console.log(JSON.stringify(skus.replace(/\#/g,"%23")));
console.log(skus.replace(/\#/g,"%23"));
console.log(skus);
console.log(JSON.stringify(skus));
console.log(encodeURIComponent(JSON.stringify(skus)));
console.log(encodeURIComponent(skus));
测试结果
在研究发现了encodeURIComponent编译可直接转换, 就尝试使用console.log(encodeURIComponent(skus));得到[ZZY210730610RDS%EF%BC%8C%23C262E],就可以满足隐藏#的需求了,而且在后端也会自动转换为#

四.案例
前端请求
/* 设置参数 */
let data = "year=" + year + "&platformId=" + platformId + "&departmentId=" + departmentId
+ "&repositoryIds=" + repositoryIds + "&skus=" + encodeURIComponent(skus);
/* 拼接连接 */
let url = CONTEXT_PATH + '/wzw/export/siteSku?' + data;\
/*发出请求:get*/
window.open(url, '_blank').location;
后端接收

五.总结
1.这里原本想用替换replace, 但是这个过于麻烦,后端还要转换回来
2.后来看到使用JSON.stringify就能成功的,后面因为他这里时改为String类型,反而多了""号更麻烦了
3.在研究发现了encodeURIComponent编译可直接转换, 就尝试使用console.log(encodeURIComponent(skus));得到[ZZY210730610RDS%EF%BC%8C%23C262E],就可以满足隐藏#的需求了,而且在后端也会自动转换为#
4.要注意数据源的规范,一些唯一固定值可以避免这些特殊字符
5.有疑问的点:明明%号也是在特殊字符列,为什么这里转成十六进制后却可以进行传输了呢
遇到的问题之“使用get请求时,请求参数中存在#导致后端request获取不到值”的更多相关文章
- 网络请求 get 请求时, 如果参数中的字符带有+号
网络请求 get 请求时, 如果参数中的字符带有+号, 今天前端在调用我的API时, 发现有个参数一直没法通过我后台的验证, 但是在前端查看时, 该参数结构又没有什么异常, 又是一番查找, 直到在后端 ...
- url请求时,参数中的+在服务器接收时为空格,导致AES加密报出javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher
报错的意思的是使用该种解密方式出入长度应为16bit的倍数,但实际的错误却不是这个,错误原因根本上是因为在http请求是特殊字符编码错误,具体就是base64生成的+号,服务器接收时成了空格,然后导致 ...
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题
为什么返回的数据前面有callback? 这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...
- 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。
http://zhengxinlong.iteye.com/blog/848712 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name& ...
- axios中get请求的params参数中带数组的处理方法
axios中get请求的params参数中带数组时导致向后台传参失败报错:from origin 'http://localhost:8080' has been blocked by CORS po ...
- FeignClient调用POST请求时查询参数被丢失的情况分析与处理
前言 本文没有详细介绍 FeignClient 的知识点,网上有很多优秀的文章介绍了 FeignCient 的知识点,在这里本人就不重复了,只是专注在这个问题点上. 查询参数丢失场景 业务描述: 业务 ...
- spring boot:用cookie保存i18n信息避免每次请求时传递参数(spring boot 2.3.3)
一,用cookie保存i18n信息的优点? 当开发一个web项目(非api站)时,如果把i18n的选择信息保存到cookie, 则不需要在每次发送请求时都传递所选择语言的参数, 也不需要增加heade ...
- ajax 跨域请求时url参数添加callback=?会实现跨域问题
例如: 1.在 jQuery 中,可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 "myurl?callback=?".jQuery 将自动替换 ? 为正确 ...
- Python HTTP 请求时对重定向中的 cookie 的处理
首先说明一下,我使用的是 Python3 的 urllib,但 Python2.x 同理(使用 urllib2). 想用脚本去登录一个网站.和很多网站一样,该网站使用 cookie 来保存会话信息.这 ...
- ASP.NET MVC API与JS进行POST请求时传递参数 -CHPowerljp原创
在API前添加 [HttpPost] 表示只允许POST方式请求 [HttpPost] public IHttpActionResult Get_BIGDATA([FromBody]Datas ...
随机推荐
- Flume - [03] HDFS Sink
一.概述 将事件写入 Hadoop 分布式文件系统(HDFS).目前支持创建文本和序列文件.支持两种文件类型的压缩.可以根据经过的时间.数据大小或事件数 周期性地滚动文件(关闭当前文件并创建文件) ...
- ABC245Ex题解
前言 \(2024.11.21\) 联考第三题,本人由于太菜没有推出 \(m=p^x\) 的性质遂部分分跑路,作文以记之. 简要题意 对于一个长度为 \(n\),值域为 \([0,m-1]\) 的序列 ...
- 详解nginx配置url重定向-反向代理
https://www.jb51.net/article/99996.htm 本文系统:Centos6.5_x64 三台主机:nginx主机,hostname: master.lansgg.com ...
- 北京大学DeepSeek系列教程:《DeepSeek与AIGC应用》
前言 今天大姚分享一个由北京大学推出的DeepSeek系列学习教程<DeepSeek与AIGC应用>,该文档全面介绍了DeepSeek-R1模型的技术特性.应用场景及其在AIGC领域的重要 ...
- go 整分钟开始执行程序
前言 有时候我们的程序要求整分钟开始运行,这时候就需要对当前时间进行判断 package main import ( "fmt" "time" ) func m ...
- 『Plotly实战指南』--折线图绘制进阶篇
上一篇介绍了Plotly绘制折线图的基础知识和数据预处理的技巧, 本文将重点探讨如何利用Plotly实现多线折线图的布局设计以及动态折线图的实现, 让我们一起掌握进阶的折线图绘制技巧. 1. 多折线图 ...
- JOKER可视化开发工具迎来重大更新
为紧跟行业前沿趋势,满足开发者日益增长的需求,我们于2025年3月13日对平台开展了全方位升级.此次更新聚焦前端交互的便捷性.服务端功能的强大性以及通用操作的流畅性,在多方面进行了深度优化.尤为值得一 ...
- Nginx可以同时支持ipv4与 ipv6的监听
Nginx可以同时支持ipv4与 ipv6的监听,但为了一致性的考虑,新版本Nginx推荐使用分开监听,下面我们开始进入正题. 一.默认IPV4配置 下面我们先来看一看默认的ipv4配置: 二.加入i ...
- 项目实战 TS
项目实战 TS 通用技巧 新手先 any 再填坑,老手先定义数据结构写逻辑 遇到新场景,没把握快速,先用 any 再填坑,填坑的过程也是 TS 技能满满提升的过程. TS 发现潜在问题 1)复杂逻辑, ...
- 密码加密|jsencrypt|md5|加密解密的两种方式
一.md5 npm install md5 二.JSEncrypt 2.1 介绍 JSEncrypt属于RSA加密,RSA加密算法是一种非对称加密算法: 2.2 使用 安装: npm install ...