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格式的对象