解决axios|解决axios 使用 URLSearchParams解析参数,导致部分低版本手机无法发请求的问题
先贴代码:
obj2String(obj: any, arr: any = [], idx = 0) {
try {for (let item in obj) {
arr[idx++] = [item, obj[item]]
}
return new URLSearchParams(arr).toString()
} catch (error) {
console.log('====================================');
console.log(error);
console.log('====================================');
}
}commonPost(url: string, options:{}) {const searchStr = obj2String(options);
return new Promise((resolve, reject) => {
axios
.post(url, searchStr)
.then(function(response) {
if (response.status == 200) {
resolve(response.data);
} else {
reject(response.data);
}
})
.catch(function(error) {
});
})}
从上面代码看到,在发送请求前,把参数对象解析为字符串,这是一个很正常的操作!
然后我们看看URLSearchParams对浏览器和手机系统的支持:URLSearchParams 详解
拉倒最底下可以看到对手机浏览器的支持要求有点高

文章图片
D30490A3-D2D0-463A-B35E-1902301DFA68.png
既然原因就是因为这个导致无法解析参数,从而无法发送请求,那么我们就可以换个方法了!
方法一: 自己遍历循环对象,把对象参数拼接起来
方法二:使用第三方插件,比如 qs ,可以
npm install qs -D
或 yarn add qs
,然后使用import Qs from 'qs'
let searchStr = Qs.stringfy(options)
axios.post(url, searchStr).xxxx
【解决axios|解决axios 使用 URLSearchParams解析参数,导致部分低版本手机无法发请求的问题】因为这个问题是不会直接体现出来,需要自己一步一步的去验证代码,花了半天时间啊!实在有点坑!
OK,问题解决了,希望对大家有帮战,也希望大家不要在趟这个坑
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 2020-04-07vue中Axios的封装和API接口的管理
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题