使用axios传递参数时,后台处理接口的方式不同,导致前端的数据,后台接受不到。
代码如下:
axios({
method: 'post',
url: url,
data: data,
timeout: TIME_OUT_MS,
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
}).then(
(result) => {
response(handleResults(result))
}
).catch(
(error) => {
if (exception) {
exception(error)
} else {
console.log(error)
}
}
)
比如上面的代码,前端传给后台的就是json,后台就会用json的方式去处理数据。
但是有时后台需要接收FormData传递的数据,这样的话,上面的代码就不适用了,需要修改。
解决方式:
1、使用URLSearchParams
var params = new URLSearchParams();
params.append('userAccount', 'test');
params.append('passWord', '123456');
axios.post(handleUrl(url), params, {
})
.then(function (response) {
console.log(response);
})
但是URLSearchParams有兼容性问题,IE上完全不兼容,要使用polyfill解决。所以这种方式不推荐使用。
2、使用qs和content-type
content-type设置为application/x-www-form-urlencoded; charset=UTF-8
使用qs:
npm install qs
import qs from ‘qs’
将传递的参数序列化,qs.stringify(data)
axios({
method: 'post',
url: url,
data: qs.stringify(data),
timeout: TIME_OUT_MS,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).then(
(result) => {
response(handleResults(result))
}
).catch(
(error) => {
if (exception) {
exception(error)
} else {
console.log(error)
}
}
)
很好,这样就解决问题了。
网友评论