Vue.js利用Axios请求到数据后,不能在页面上显示?
前端的代码:
<template>
<div>
<h1>Page01</h1>
<ul>
<li v-for="post in posts">
{{post.body}}
</li>
</ul>
</div>
</template>
<script>
export default {
data () {
return {
posts: []
}
},
mounted: function () {
this.$http.get('http://127.0.0.1:5000/api/posts/'
).then(function (response) {
this.posts = response.data.subjects
}, function (response) {
console.log(response)
})
}
}
</script>
希望请求到数据并现实出来,但是报错,
后端应该是正确的,显示的是200
127.0.0.1 - - [29/Jul/2017 19:19:27] "GET /api/posts/ HTTP/1.1" 200 -
这说明请求是成功,同样利用curl命令同样也能请求到json数据,刚刚查了一下,有的说是axios跨域问题,不是很明白,求大神指导一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这跨域了,表明当前的环境和接口环境不在同一个域名里面,你可以在配置关键词是proxyTable
一般在
跨域了啊
curl请求成功是因为跨域是浏览器的安全机制
简单的可以设置Access-Control-Allow-Origin Header 添加允许跨域的域
关键字:CORS
https://developer.mozilla.org...
跨域了就是你的html的访问域名或端口和你的接口不是同一个域名或端口而产生的问题,解决方案有
将接口和前端访问的域名+端口设置为同一个
不是同一个域名或端口就在写接口的服务端允许跨域请求
不用那么麻烦,直接设置webpack-dev-server的proxy vue-cli就设置proxyTable
控制台出现"Access-Control-Allow-Origin Header"一般都是api跨域的问题。
vue可以通过设置api代理的方法来解决跨域的问题。
vue-cli2中api的代理都在config的index.js中proxyTable部分。
proxyTable: {
开发环境的代理api设置在dev.env.js中
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
VUE_APP_BASE_API: '"/api"',
})
VUE_APP_BASE_API设置为"/api"
vue一般情况下是需要对axios进行一次封装。
没有封装的话,axios调用的时候需要设置变量baseUrl = process.env.VUE_APP_BASE_API,
let url = baseUrl + "posts/"
这样就不会出现跨域的问题。
同理如果是vue-cli3.0
api代理设置在vue.config.js文件中
至于生产环境,由于生产环境一般是nginx部署,所以api代理的问题在nginx中设置。vue代码可以不用设置。