目前Vue项目中对json数据的请求一般使用两个插件vue-resource和axios, 但vue-resource已经不再维护, 而axios是官方推荐的且npm下载量已经170多万,github的Star已经接近4.5万, 再看看vue-resource

但是作为学习笔记,在学习axios的同时也会对比vue-resource的用法。

先看看同域请求

 <div class="container">
<h1>vue request</h1>
<button @click="getJson">GET请求</button>
</div>
 methods: {
getJson() {
this.$http.get('/static/api/city.json', {
params: {
userId: '111'
},
headers: {
'token': 'mitu'
}
}).then((res) => {
console.log(res)
}, (err) => {
console.log(err)
})
},
}

请求结果 :

这是vue-resource的get请求方法, city.json存在于同域下的static目录, 注意,首先必须先安装 npm install -S vue-resource 然后在入口文件main.js中注册vue-resource

同理 axios的get请求如下 :

 import axios from 'axios'
methods: {
getJson() {
axios.get('/static/api/city.json').then((res) => {
console.log(res)
}).catch((err) => {
console.log(err)
})
}
}

区别在于 ,

1 .axios无需在main.js中注册,但需要在组件内部引入 import axios from 'axios'

2. vue-resource是绑定到vue实例中,所以调用时应该是 this.$http.get(), 而axios是独立的插件, 调用应该是 axios.get()

跨域请求 :

如直接把

axios.get('/static/api/city.json') 改成请求其他外部域的api如: 
axios.get('https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg')
返回结果如下 :

注意到有 No 'Access-Control-Allow-Origin' header, 表示浏览器端限制了跨域的请求。

解决的思路是,先让服务端通过跨域请求,然后客户端(浏览器)再向服务端请求数据,在此服务端起到一个代理的作用 。

1. 找到项目配置文件 config/index.js ,将proxyTable添加以下代码 :

proxyTable: {
'/api': {
target: 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},

'/api'是供客户端请求的接口 可自定义, 以上两个'/api'必须是一致的。表示客户端请求以 '/api'开头的目标都指向target

target: url  ------ 是请求的外域目标api

changeOrigin ----- ture表示开启跨域请求

pathRewrite ---- 对目标资源重定向,可为空值

  methods: {
getJson() {
axios.get('/api').then((res) => {
console.log(res)
}).catch((err) => {
console.log(err)
})
},
}

请求数据成功!

												

Vue+webpack项目中实现跨域的http请求的更多相关文章

  1. vue项目中解决跨域问题axios和

    项目如果是用脚手架搭建的(vue cli)项目配置文件里有个proxyTable proxyTable是vue-cli搭建webpack脚手架中的一个微型代理服务器,配置如下 配置和安装axios 安 ...

  2. vue项目中的跨域源请求拦截问题CORS头缺少'Access-Control-Allow-Origin'

    这里使用的是axios发请求出现的. 访问的api接口是: 在不同域之间访问是比较常见,在本地调试访问远程服务器....这就是有域问题. VUE解决通过proxyTable 解决办法: 1.检查请求方 ...

  3. 关于vue项目中axios跨域的解决方法(开发环境)

    1.在config文件中修改index.js proxyTable: { "/api":{ target: 'https://www.baidu.com/muc/',//你需要跨域 ...

  4. Vue+webpack项目中,运行报错Cannot find module 'chalk'的处理

    刚开始用vue + webpack新建项目,在github上下载了一个示例,输入npm init >>>npm run dev 后报错 Cannot find module 'cha ...

  5. vue+webpack项目中px2rem的例子

    项目环境搭建此处省略,不再赘述,需要的请查阅相关资料. 本篇只介绍,如果在vue+webpack的项目中配置,把px自动转为rem 第一步安装   npm install   postcss-px2r ...

  6. web项目中的跨域问题解决方法

    一种是JSONP 一种是 CORS. 在客户端Javascript调用服务端接口的时候,如果需要支持跨域的话,需要服务端支持. JSONP的方式就是服务端对返回的值进行回调函数包装,他的优点是支持众多 ...

  7. 前端学习笔记系列一:11@vue/cli3.x中实现跨域的问题

    由于浏览器的同源访问策略,vue开发时前端服务器通常与后端api服务器并非是相同的服务器,因此需要使用一个代理服务器实现跨域访问.在@vue/cli3.x根目录下创建一个vue.config.js文件 ...

  8. vue项目中设置跨域

    config->index.js 'use strict' // Template version: 1.3.1 // see http://vuejs-templates.github.io/ ...

  9. vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现前后台分离开发

    在项目开发中,前后台分离,做了假数据,项目使用vue2.0重构,后台也推到重来了,为了不耽误开发进程,我做了虚拟的数据请求,使用vue-cli脚手架搭建的项目文件中dev-server搭建虚拟api请 ...

随机推荐

  1. python与pycharm安装

    1.python install 1.1 下载安装包 -  https://www.python.org/downloads 1.2 installl 1.2.1 双击exe安装文件 1.3 如果安装 ...

  2. iOS 线程安全

    线程安全: 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题.就好比几个人在同一时修改同一个表格,造成数据的错乱. 解决多线程安全问题的方法 方法一:互斥锁(同步锁) @synchroni ...

  3. iOS中UITableView的一些问题思考

    UITableview的数据源为什么是代理,而不是引用? 我的理解,一般情况下控制器会引用tableView, 数据源和代理方法都是tableView的一个若引用,出了“tableView.datas ...

  4. Chap2:什么是shell[The Linux Command Line]

    shell - a program that takes keyboard commands and passes them to the operating system to carry out ...

  5. 《Mysql 引擎》

    一:什么是引擎? - 就是一种数据存取和处理方式. - 在 MySQL 中,引擎是以"插件式"存在的,使我们可以很方便的使用各种引擎. 二:怎么查看数据库支持的引擎? - show ...

  6. Postfix 邮件服务器搭建

    搭建服务环境: Centos 6 配置域名hosts: mail.demonC6.com 1.清理系统自带的邮件软件 # rpm -qa | grep sendmail* # rpm -e sendm ...

  7. mimkatz 用法

    mimikatz用法 privilege::debug    进入debug模式 sekurlsa::logonPasswords 查看所有用户密码 sekurlsa::wdigest 读取当前登录用 ...

  8. JavaScript学习笔记--语法二

    条件判断与C语言一样 两种循环.for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i var x = 0; var i; for (i ...

  9. runtime实现weak属性

    我们可以自己创建一个 A 类,然后在“宿主对象”和“值对象”建立 weak 关系的时候,偷偷地创建一个 A 类的实例 a,绑定在 “值对象” 上. 当“值对象”销毁后,这个 a 也会被销毁.而 A 类 ...

  10. Spark Sql数仓报-Metastore contains multiple versions

    Spark版本为2.1.0,Hadoop版本为2.7.1,元数据存储在mysql中,异常信息如下: Exception in thread "main" java.lang.Run ...