axios 修改里面配置
transformResponse: [function transformResponse(data) {
if (typeof data === 'string') {
try {
let c1 = data.toString().replace(/:\d{17,}/g, ":\"@rr$&\"").replace(/@rr:\s/g, "").replace(/@rr:/g, "");
let c2 = c1.replace(/:\d{1,}\.\d+/g, ":\"@rr$&\"").replace(/@rr:\s/g, "").replace(/@rr:/g, "");
data = JSON.parse(c2)
} catch (e) { /* Ignore */ }
// try {
// data = JSON.parse(data);
// } catch (e) { /* Ignore */ }
}
return data;
}],
后面在处理其他接口的时候还是遇到了一个问题,关于后端数据返回的格式.有朋友遇到过这种问题欢迎互相探讨
//http 响应 response 拦截器
axios.interceptors.response.use
response => {
// console.log("请求地址:",response.config.url)
// console.log("接受到参数类型:",typeof(response.data))
// console.log("接受到参数:",response.data)
在接受到后台参数的时候看返回的是什么类型的数据,测试来就是obj和string(偶尔出现)

一开始我所有接口请求返回的数据都是obj,但是后来遇到string,至今没有弄明白为什么返回string的数据
后端同事说,可能是数字太长的问题,Java把long类型转换string传输即可。
查看vue axios中的源码
node_modules/axios/lib/defaults.js
transformResponse: [function transformResponse(data) {
/*eslint no-param-reassign:0*/
//console.log("接收到的数据类型:",typeof data)
if(typeof data === 'string') {
try {
let c1 = data.toString().replace(/:\d{17,}/g, ":\"@rr$&\"").replace(/@rr:\s/g, "").replace(/@rr:/g, "");
let c2 = c1.replace(/:\d{1,}\.\d+/g, ":\"@rr$&\"").replace(/@rr:\s/g, "").replace(/@rr:/g, "");
data = JSON.parse(c2);
} catch(e) { /* Ignore */ }
}
return data;
}],
了解下axios源码这里第三行我输出的时候就是一个string,然后return的时候已经转换成json对象了。
所以,无解了,一会好也会坏的。无奈之下只有在接受的时候重新再判断一下
axios.interceptors.response.use(
response => {
// console.log("请求地址:",response.config.url)
// console.log("接受到参数类型:",typeof(response.data))
// console.log("接受到参数:",response.data)
//console.log("响应的参数类型:",typeof(response.data))
//如果接收到的是一个string,那么就转换成json格式
if(typeof(response.data) == "string") {
console.log("获取参数类型",typeof(response.data), response.config.url)
response.data = eval('(' + response.data + ')')
}
else{
console.log("获取参数类型",typeof(response.data), response.config.url)
}
又遇到类似问题的朋友欢迎一起分享下解决方案
网友评论