一.问题

使用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获取不到值”的更多相关文章

  1. 网络请求 get 请求时, 如果参数中的字符带有+号

    网络请求 get 请求时, 如果参数中的字符带有+号, 今天前端在调用我的API时, 发现有个参数一直没法通过我后台的验证, 但是在前端查看时, 该参数结构又没有什么异常, 又是一番查找, 直到在后端 ...

  2. url请求时,参数中的+在服务器接收时为空格,导致AES加密报出javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

    报错的意思的是使用该种解密方式出入长度应为16bit的倍数,但实际的错误却不是这个,错误原因根本上是因为在http请求是特殊字符编码错误,具体就是base64生成的+号,服务器接收时成了空格,然后导致 ...

  3. 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题

    为什么返回的数据前面有callback?   这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...

  4. 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。

    http://zhengxinlong.iteye.com/blog/848712 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name& ...

  5. axios中get请求的params参数中带数组的处理方法

    axios中get请求的params参数中带数组时导致向后台传参失败报错:from origin 'http://localhost:8080' has been blocked by CORS po ...

  6. FeignClient调用POST请求时查询参数被丢失的情况分析与处理

    前言 本文没有详细介绍 FeignClient 的知识点,网上有很多优秀的文章介绍了 FeignCient 的知识点,在这里本人就不重复了,只是专注在这个问题点上. 查询参数丢失场景 业务描述: 业务 ...

  7. spring boot:用cookie保存i18n信息避免每次请求时传递参数(spring boot 2.3.3)

    一,用cookie保存i18n信息的优点? 当开发一个web项目(非api站)时,如果把i18n的选择信息保存到cookie, 则不需要在每次发送请求时都传递所选择语言的参数, 也不需要增加heade ...

  8. ajax 跨域请求时url参数添加callback=?会实现跨域问题

    例如: 1.在 jQuery 中,可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 "myurl?callback=?".jQuery 将自动替换 ? 为正确 ...

  9. Python HTTP 请求时对重定向中的 cookie 的处理

    首先说明一下,我使用的是 Python3 的 urllib,但 Python2.x 同理(使用 urllib2). 想用脚本去登录一个网站.和很多网站一样,该网站使用 cookie 来保存会话信息.这 ...

  10. ASP.NET MVC API与JS进行POST请求时传递参数 -CHPowerljp原创

    在API前添加    [HttpPost] 表示只允许POST方式请求 [HttpPost] public IHttpActionResult Get_BIGDATA([FromBody]Datas  ...

随机推荐

  1. flutter-iOS数字键盘无法属于小数点

    keyboardType:TextInputType.numberWithOptions(decimal: true),  

  2. 运用myabits

    要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可. 如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中: ...

  3. [BZOJ4605] 崂山白花蛇草水 题解

    突然想买一瓶,然后喝上几口.(不要命的想法) 动态全局 \(k\) 大想到权值线段树上二分. 由于要存储二维的点,所以得用到我们神通广大的 \(KDT\) 了. 那么想到权值线段树套 \(KDT\) ...

  4. vue element 动态增加表单并进行表单验证

    表单验证:需要注意的一点是: 普通表单验证单项依靠的是prop-而动态生成的表单要用:prop 书写的语法是:prop="'moreNotifyObject.' + index +'.not ...

  5. docker - [09] 镜像详解

    题记部分 一.镜像是什么   镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,还包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 如果得到 ...

  6. 工作必会的Nginx的启动安装和常用配置例子

    概述 由于自己的之前学习 nginx 只会简单使用,然后每次配置 nginx 都要找文档去了解怎么配置,有点麻烦,所以这里记录下一些常用的nginx 配置和配置的例子,到时候直接 copy 修改即可. ...

  7. go 简单封装数学运算包

    前言 我们在编写程序时,经常会遇到一些高精度的数学运算,这时候使用简单的运算符会造成精度的缺失. 这里引用了这个第三方包 https://github.com/shopspring/decimal 做 ...

  8. 往EXCEL粘贴超长整数字段

    写一个表格的HTML <table border="1"> <tr> <td>1</td> <td>1234567890 ...

  9. http状态码413,并提示Request Entity Too Large的解决办法

    使用wordpress的用户经常遇到的问题,就是在后台上传多媒体文件的时候,发现文件大小是有限制的,通常是2M.如图: 如果上传的文件超过2M,服务端返回的状态码会是413,同时提示上传失败.实际上, ...

  10. 一个专业DBA应具备的技能

    本文可以作为MySQL DBA面试官,以及候选人的双向参考 面试流程 接下来先说下我以往在做MySQL DBA面试时的过程(套路): 1.先自我介绍后,再让候选人花2-5分钟做下自我简介有不少人可能对 ...