无法使用 Vue 和 Axios 从 API 获取数据

Posted

技术标签:

【中文标题】无法使用 Vue 和 Axios 从 API 获取数据【英文标题】:Can't fetch data from API using Vue and Axios 【发布时间】:2021-03-07 23:42:02 【问题描述】:

我正在创建一个电子学习网站,您可以在其中选择课程卡片。这是我的代码

<template>
<div>
  <v-container>
      <v-row>
          <v-col md="3" offset-lg="1">
              <Categories />
          </v-col>
          <v-col md="9" lg="7">
              <CourseList v-bind:list="list"/>
          </v-col>
      </v-row>
  </v-container>
</div>
</template>

<script>
import CourseList from '@/components/courses/CourseList.vue'
import Categories from '@/components/courses/Categories.vue'
import axios from 'axios'


export default 
  components: 
    CourseList,
    Categories
  ,
  data() 
         return 
            list: []
         
  ,
  mounted: function() 
            axios
                .get('https://esl3usx3t7.execute-api.us-east-1.amazonaws.com/testing1/api/get_course')
                .then(res => this.list = res.body)
                .catch(err => console.log(err))
        

</script>

课程列表.vue

<template>
  <div>
      <h2>Courses</h2>

      <v-row>
          <v-col sm="6" md="4">
              <VerticalCard v-bind:list="list"/>
              
          </v-col>
      </v-row>
      
  </div>
</template>

<script>
import VerticalCard from '@/components/cards/VerticalCard.vue'

export default 
    name: "CourseList",
    components: 
        VerticalCard
    ,
    props: ["list"]

</script>

我的问题是我无法从 API 链接获取数据 -> https://esl3usx3t7.execute-api.us-east-1.amazonaws.com/testing1/api/get_course

我想知道我做错了什么。我也尝试使用 list 来获取数据,但它没有用。我现在的目标是获取所有数据,即使它看起来很乱。对不起我的英语不好,谢谢!

【问题讨论】:

【参考方案1】:

axios 将数据包装在数据对象中,所以应该是.then(res =&gt; this.list = res.body)而不是.then(res =&gt; this.list = res.data.body)

【讨论】:

【参考方案2】:

axios 请求的每一个数据响应都会包裹在data 对象中,所以你需要从data.body 获取body 数据。你可以通过console.log(res)查看

const uri = 'https://esl3usx3t7.execute-api.us-east-1.amazonaws.com/testing1/api/get_course'
axios
  .get(uri)
  .then(res => 
    console.log(res)
    let data: statusCode, body = res
    if(statusCode == 200)
      this.list = [...body]
  )
  .catch(err => console.log(err))

【讨论】:

以上是关于无法使用 Vue 和 Axios 从 API 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

在Vue中使用箭头函数无法获取gata

Vue axios 从 api 获取数据 -

在 Vue.js 中使用 axios 向 Laravel API 发送获取请求

无法使用 ReactJs、Axios、Redux 渲染/显示从 api 获取的数据

无法在 Nuxt 组件中使用 axios 从 api 获取数据

如何使用 Axios 使用经过身份验证的 API