当前位置: 首页 > 知识库问答 >
问题:

等待Vue中的Ajax响应数据。js

闻人博
2023-03-14

我有一个Vue组件,我试图从使用axios的API获取一些数据。

<template>
    <div>
        This is Default child component
        {{tools[0].name}}
    </div>
</template>

<script>
import { CustomJS } from '../js/custom.js';

export default {
  name: 'HomeContent',
  props: {
    tools: []
  },
  methods: {
      fetchData() {
        const customJs = new CustomJS();
        return customJs.getTools();
      }
  },
  created() {
    this.tools = this.fetchData(); //preferably need to wait here wait for response
  }
}
</script>

getTools()函数位于Vue组件文件之外的另一个JS文件中,该文件使用axios.get.

getTools(id = 0){
    this.apiTool += (id > 0) ? id : '';
    axios.get(this.apiTool, {
    })
    .then(function (response) {
        console.log(response.data);
        return response.data;
    })
    .catch(function (error) {
        console.log(error);
    });
}

问题是,{{tools}未定义,因为getTools()需要一些时间才能返回响应数据。如何等待响应数据然后返回?

共有3个答案

廖诚
2023-03-14
<template>
    <div v-if="isGetTools">
        This is Default child component
        {{tools[0].name}}
    </div>
</template>

<script>
import { CustomJS } from '../js/custom.js';

export default {
  name: 'HomeContent',
  props: {
    tools: []
  },
  data: function () {
    return {
      isGetTools: false
    }
  },
  methods: {
      fetchData() {
        const customJs = new CustomJS();
        this.tools = customJs.getTools();
        this.isGetTools = true;
      }
  },
  created() {
    this.fetchData(); //preferably need to wait here wait for response
  }
}
</script>

尝试在div中添加v-if。并在从AXIOS获取结果后将isGetTools更新为true

颜杰
2023-03-14

通常情况下,我使用加载程序向用户显示请求正在进行中

<div v-if="loading">
  <loader /> //a loader component
</div>

<div v-else>
  // show the template since request finished
</div>

剧本呢

export default {
  data: () => ({
    loading: false
  }),

  created() {
   this.loading = true
   axios.get('api') //your request
   .then(response => console.log(response))
   .finally(() => (this.loading = false)) //when the requests finish
  }

}

如果您不喜欢上面的方式,您可以使用beForeEnter,这样只有当请求完成时,路由才会加载:

{
  path: '/my-route',
  component: YourComponent,
  props: true,
  beforeEnter (to, from, next) {
    axios.get('api-request')
     .then(response => {
      to.params.data = response //we pass data through props to the component
      next()
     })
  }
}
甄佐
2023-03-14

尝试下面的代码:这样代码只会在实际加载时呈现

<div v-if="tools">
    This is Default child component
    {{tools[0].name}}
</div>
 类似资料:
  • 问题内容: 我有一个页面,使用被称为100次(async:true)的jQuery.ajax,问题是,当它们都被加载时,我需要系统等待所有100次调用返回后才能继续。我将如何处理? 提前致谢!:) 更新: 这些调用在for()循环中进行(其中有100个:) 问题答案: 最好的方法是使用。您可以按以下方式使用它: 另外,如果您在数组中拥有所有AJAX调用,则可以使用: 请注意,这至少需要jQuery

  • 我有一个项目,我需要使用一个站点从中获取数据。所以事情是这样的:使用htmlUnit我用我的数据填充文本框,然后我按下锚,它使用ajax下载我需要的内容并动态更改超文本标记语言页面,在模态窗口中显示内容。但是在我使用锚上的. Click()后,我得到了相同的页面,没有更新,在寻找解决方案后,我在网络上发现了这个: HtmlUnit将执行Ajax调用并更新页面。请注意,与常规页面加载不同,Click

  • 问题内容: 如何让selenium等待日历小部件的加载?现在,我只是在将测试用例导出到junit程序后进行操作。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用

  • 问题内容: 如何让硒等待日历小部件的加载?现在,在将测试用例导出到junit程序后,我只是在做一个。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用

  • 有什么想法吗?没有JS库。 编辑:我做了几次回拨尝试。老实说,我很难理解他们。下面是我的最后一次尝试:

  • 问题内容: 我的页面运行着一系列命令,这些命令迫使我的PHP脚本停止更改,直到收到响应为止。我如何知道不要等待响应而只运行命令? 我正在使用一个具有后端系统的复杂命令,我可以查询该命令以检查状态,因此我不关心响应。 问题答案: 取决于您使用的平台和运行的命令。 例如,在Unix / Linux上,您可以在命令末尾追加命令,以告诉Shell释放您已启动的进程,exec将立即返回。这在Windows上