遇到的问题之“使用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 ...
随机推荐
- flutter-iOS数字键盘无法属于小数点
keyboardType:TextInputType.numberWithOptions(decimal: true),
- 运用myabits
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可. 如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中: ...
- [BZOJ4605] 崂山白花蛇草水 题解
突然想买一瓶,然后喝上几口.(不要命的想法) 动态全局 \(k\) 大想到权值线段树上二分. 由于要存储二维的点,所以得用到我们神通广大的 \(KDT\) 了. 那么想到权值线段树套 \(KDT\) ...
- vue element 动态增加表单并进行表单验证
表单验证:需要注意的一点是: 普通表单验证单项依靠的是prop-而动态生成的表单要用:prop 书写的语法是:prop="'moreNotifyObject.' + index +'.not ...
- docker - [09] 镜像详解
题记部分 一.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,还包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 如果得到 ...
- 工作必会的Nginx的启动安装和常用配置例子
概述 由于自己的之前学习 nginx 只会简单使用,然后每次配置 nginx 都要找文档去了解怎么配置,有点麻烦,所以这里记录下一些常用的nginx 配置和配置的例子,到时候直接 copy 修改即可. ...
- go 简单封装数学运算包
前言 我们在编写程序时,经常会遇到一些高精度的数学运算,这时候使用简单的运算符会造成精度的缺失. 这里引用了这个第三方包 https://github.com/shopspring/decimal 做 ...
- 往EXCEL粘贴超长整数字段
写一个表格的HTML <table border="1"> <tr> <td>1</td> <td>1234567890 ...
- http状态码413,并提示Request Entity Too Large的解决办法
使用wordpress的用户经常遇到的问题,就是在后台上传多媒体文件的时候,发现文件大小是有限制的,通常是2M.如图: 如果上传的文件超过2M,服务端返回的状态码会是413,同时提示上传失败.实际上, ...
- 一个专业DBA应具备的技能
本文可以作为MySQL DBA面试官,以及候选人的双向参考 面试流程 接下来先说下我以往在做MySQL DBA面试时的过程(套路): 1.先自我介绍后,再让候选人花2-5分钟做下自我简介有不少人可能对 ...