axios是一个基于promise的HTTP库,同一套代码可以运行在浏览器以及node.js中。也就是说在Node环境下axios使用原生node.js的http模块进行网络请求,而在浏览器中则使用XMLHttpRequests进行网络请求。
接下来,来看看如何去使用它,在这里我们只说使用axios来进行get请求以及post请求:
axios进行get请求:
axios.get(
"/ourm/displayUserOrder.do",
{
params: {
orderid: id,
orderState: '已完成'
}
}
)
.then(res => {
成功后的操作
}).catch(e => {
失败后的操作
})
如图所示,这是在使用axios进行get请求,传递进去的有两个参数,第一个参数是请求的地址,第二个参数是一个对象,把要发送的数据写到对象里面的params中,然后这些数据在发送请求的时候,会将这些数据以查询字符串的格式拼接到url后面去,也就是
/ourm/displayUserOrder.do?orderid=id&orderState=已完成
如上所示。如果不需要发送数据,第二个参数可以不传。当然也有另一种写法,我们也可以这样子
axios.get(
"/ourm/displayUserOrder.do?orderid=id&orderState=已完成"
)
.then(res => {
成功后的操作
}).catch(e => {
失败后的操作
})
接下来我们来看看axios进行post请求:
let data = {
orderid : this.$route.query.id,
orderState : "待收货",
}
axios.post("/ourmadisplayUserOrder.do", data).then(res => {
成功后进行处理
}).catch(e => {
失败处理
})
当我们这样子发送post请求的时候,发送过去的data是以json格式对象的(axios默认会做的,自动将对象转成json对象),如果后端希望拿到的不是json格式对象的话,我们是需要对参数进行一个处理的。
如果后端希望拿到的数据是查询字符串,也就是value1=1&value2=2&这种形式
那么我们可以在axios的一个可选参数transformRequest中对发送的数据进行一个处理,
let data = {
orderid : this.$route.query.id,
orderState : "待收货",
}
axios.post("/ourma/playUserOrder.do", data, {
transformRequest: [function (data) {
var str='';
for (var key in data) {
str += key + '=' + data[key] + '&';
}
return str;
}]
}).then(res => {
成功处理
}).catch(e => {
失败处理
})
直接在里面遍历对象,将对象的属性跟值都以查询字符串的格式拼接到字符串str中,最后返回str就ok了。
axios的官网也给出了别的方案,使用URLSearchParams 或者使用qs库,有兴趣的小伙伴可以去官网看看,但本质上都是一样的,就是把发送的数据转换成查询字符串嘛。
顺便记一下post请求常见的几种数据格式:
请求头 Content-Type 是 application/x-www-form-urlencoded
这种就是向服务器端说,提交过去的数据就是查询字符串格式的,也就是value1=1&value=2 这种格式
请求头 Content-Type 是 application/json
这种就是向服务器端说,提交过去的是json格式的对象