0
点赞
收藏
分享

微信扫一扫

layui分页laypage结合Flask+Jinja2实现流程

秀儿2020 2023-12-14 阅读 22

1、axios调接口特殊字符丢失的问题

项目开发过程中遇到一个接口传参,参数带特殊字符,axios调接口特殊字符丢失的问题

例如接口:

name是个参数直接调接口的时候拼到接口上,get/user/detail/test123#$%,调接口发现后面的特殊字符#$%丢失了,调的接口变成了get/user/detail/test123

2、解决办法:

参数使用encodeURIComponent编译一下,再拼到接口上,这样特殊字符不会丢失,后端可以正常接收参数。

import Axios from 'src/axios/index.js';


const name = 'test123#$%';

// 直接拼接口上
Axios.get(`get/user/detail/${name}`).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});

// 参数使用encodeURIComponent编译一下,再拼接口上
Axios.get(`get/user/detail/${encodeURIComponent(name)}`).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});

// 直接拼接口上

// 参数使用encodeURIComponent编译一下,再拼接口上

3、延伸

使用params传参,如果直接将参数使用?拼接到后面,也是会存在特殊字符丢失的问题

import Axios from 'src/axios/index.js';
const name = 'test123#$%';

// 直接拼接口上
Axios({
url: `get/user/detail?name=${name}`,
method: 'get',
}).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});

// 参数使用encodeURIComponent编译一下,再拼接口上
Axios({
url: `get/user/detail?name=${encodeURIComponent(name)}`,
method: 'get',
}).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});

// 正常逻辑传参数,推荐
Axios({
url: 'get/user/detail',
method: 'get',
params: { name },
}).then(function (response) {
console.log(response);
}).catch(function (error) {
console.log(error);
});

// 直接拼接口上

// 参数使用encodeURIComponent编译一下,再拼接口上

// 正常逻辑传参数,推荐

4、encodeURI 和 encodeURIComponent

MDN上关于encodeURI 和 encodeURIComponent的介绍

encodeURI() - JavaScript | MDN

encodeURIComponent() - JavaScript | MDN

encodeURIComponent不转义的字符包括:

类型包含
非转义的字符字母 数字 - _ . ! ~ * ' ( )

encodeURI不转义的字符包括:

类型包含
保留字符; , / ? : @ & = + $
非转义的字符字母 数字 - _ . ! ~ * ' ( )
数字符号#

5、解码

encodeURI使用decodeURI解码,encodeURIComponent使用decodeURIComponent 解码
 

举报

相关推荐

0 条评论