Axios

Axios

轻松启动

在学习axios之前,我们先安装axios的依赖(再一次体现vue是渐进式框架的特点)

npm install axios

从axios框架中导入axios

import axios from "axios";

注:axios使用的是默认暴露,导入时不需要加大括号


使用Axios设置请求的参数(请求三要素)

Axios的返回值是一个promise对象

function getLoveMessage() {
  let promise = axios({
    method: "get",
    url: "https://api.uomg.com/api/rand.qinghua?format=json",
    params: {
      // 如果请求方式是get,使用params中的数据会以键值对形式放入url后
      // 如果请求方式是post,使用params中的数据会以键值对形式放入url后
    },
    data: {
      // 如果请求方式是post,使用data中的数据会以JSON形式放入请求体中      
    }
  })

以上的请求方法会在下文简化


使用promise的API去解析响应结果对象

Object.assign(object1, object2) 可以将后一个对象的同名参数赋值给前一个对象的同名参数

promise.then(
  function (response) {
    Object.assign(message, response.data)
  }
).catch(
  function (error) {
    console.log(error)
  }
)

这里可以使用await来接受参数

let {data} = await promise // 使用解构表达式直接接收对象中所需的参数 从response对象中提取出data对象
Object.assign(message, data)

response 响应结果对象
  • data:服务端响应回来的结果对象
    • 如果data是以JSON串的形式,会自动将其转换为对象
  • status:响应状态码
  • statusText:响应状态描述
  • headers:本次响应的所有响应头
  • config:本次请求的配置信息
  • request:本次请求发送时所使用的XMLHttpRequest对象

Axios本质是使用Ajax的XMLHttpResquest的异步请求


Axios 请求方法

Axios.get()

使用Axios.get方法发送get请求,此方法中可以添加一些参数,返回值为一个promise对象

axios.get("url", {
  param: {键值对参数,被放在url的?后},
  headers: {请求头参数}
})

如果通过get请求指定url不添加任何参数时,可直接使用axios.get("url")


Axios.post()

使用Axios.post方法发送post请求,此方法中可以添加一些参数,返回值为一个promise对象

与get()方法不同,在url和其他参数中增加一个大括号,在这个大括号里可以写json串中,被放在请求体中作为post方法的参数

axios.post(
  "url", 
  {JSON},
  {
  param: {键值对参数},
  headers: {请求头参数}
  }
)

与get请求一样,如果不添加任何参数可以直接写成axios.post("url")


Axios请求方法简写
let promise = axios.get("https://api.uomg.com/api/rand.qinghua", {
  params: {format: "json"}
})

案例改写:每日情话

<script setup>

import axios from "axios";

import {reactive} from "vue"

let message = reactive({
  code: "",
  content: ""
})

async function getLoveMessage() {
  // 发送请求
  let promise = axios.get("https://api.uomg.com/api/rand.qinghua", {
    params: {format: "json"}
  })

  //接受响应
  let {data} = await promise // 使用解构表达式直接接收对象中所需的参数 从response对象中提取出data对象
  Object.assign(message, data)
}

</script>

<template>
  <div>
    <h1>{{ message.content }}</h1>
    <button @click="getLoveMessage()">获取每日情话</button>
  </div>
</template>

<style scoped>

</style>