如何使用 this.$http.get() 从 url 获取 json 数据?
Posted
技术标签:
【中文标题】如何使用 this.$http.get() 从 url 获取 json 数据?【英文标题】:How can I get json data from a url using this.$http.get()? 【发布时间】:2019-11-22 01:19:33 【问题描述】:我是 vuejs 新手,请帮我解决这个问题-
this.$http.get() is not working.
我试过了-
npm install vue-resource
和
npm install vue-resource --save
然后我写了这段代码
<template>
<v-container>
questionData
</v-container>
</template>
data ()
return
questionData: [],
mounted ()
this.$http.get('http://api.iqube.org.in/questions').then(response =>
this.questionData = response.body;
console.log(response.body)
, error =>
);
控制台日志显示未定义。
这就是我的 main.js 的样子
import Vue from 'vue';
import router from './router';
import store from './store';
import './plugins/vuetify';
import './plugins/axios';
import './registerServiceWorker';
import App from './App.vue';
import VueResource from 'vue-resource';
Vue.use(VueResource);
Vue.config.productionTip = false
new Vue(
router,
store,
render: h => h(App)
).$mount('#app')
我是在导入不需要的东西吗?
所有问题数据都应显示在页面中。但我得到一个空白页。我也在控制台中收到此错误
Cannot redefine property: $http
【问题讨论】:
axios 是一个通常用于 GET、POST 和其他操作的库。你可能想看看它。 ofc 在更简单的服务请求中可能没有必要,但由于其响应解析功能,它将大大简化您的代码。 “控制台日志显示未定义。” console.log 显示 什么 未定义? @ceejayoz 最有可能response.body
@mcy 很有可能,我敢打赌 OP 需要在那里使用response.data
。
我仍然收到此错误:vue-resource.esm.js?28dd:1520 Uncaught TypeError: Cannot redefine property: $http at Function.defineProperties () at plugin (vue-resource .esm.js?28dd:1520) 在 Function.Vue.use (vue.runtime.esm.js?2b0e:5103) 在 eval (main.js?56d7:14) 在 Module../src/main.js ( app.js:7574) 在 webpack_require (app.js:724) 在 fn (app.js:101) 在 Object.1 (app.js:7948) 在 webpack_require (app.js:724) 在 app.js:791
【参考方案1】:
在调试您的应用程序后,我发现您在您的 dailypractice.vue
组件上重新定义(重新导入)Vue
以及 VueAxios
/ axios
... 如果您打算使用 vueResource
,请不要不需要axios
(我推荐 axios 作为 Vue 开发人员)
// dailypractice.vue
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)
只需从您的dailypractice
组件中删除之前的代码,并从您的项目(axios.js 文件)中删除axios
/ VueAxios
,您的应用就可以正常运行了。
【讨论】:
【参考方案2】:你需要定义this.$http
root:
import Vue from 'vue';
import router from './router';
import store from './store';
import App from './App.vue';
import VueResource from 'vue-resource';
Vue.use(VueResource);
Vue.config.productionTip = false
new Vue(
router,
store,
render: h => h(App)
).$mount('#app')
Vue.http.options.root = 'http://api.iqube.org.in/';
然后在你的挂载和任何你包含this.$http
的地方添加你想要定位的路线......像这样:
mounted ()
this.$http.get('/questions').then(response =>
this.questionData = response.body;
console.log(response.body)
, error =>
);
【讨论】:
github.com/boidurja/mobileAppOnGithub.git 这是我在 github 中的项目的链接。谁能找出问题所在?我将不胜感激。 @BoidurjaTalukdar 是的,兄弟,我现在会检查您的问题.. 并发布另一个答案和解决方案【参考方案3】:不要忘记导入 axios 并在 main.js 中使用它。
import axios from 'axios'
Vue.use(axios)
【讨论】:
以上是关于如何使用 this.$http.get() 从 url 获取 json 数据?的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 vue js 中从 this.$http.get 返回数据
vue中调用接口传输对象使用this.$http.get 和 this.$http.post
vue基本知识回顾 | this.$http.get 和 this.$http.post传参 / created与mounted区别 / 富文本解析
vue基本知识回顾 | this.$http.get 和 this.$http.post传参 / created与mounted区别 / 富文本解析
vue基本知识回顾 | this.$http.get 和 this.$http.post传参 / created与mounted区别 / 富文本解析