为什么不用它呢?
所以真实开发中很少直接使用, 而是使用jQuery-Ajax
相对于传统的Ajax非常好用.
那我们为什么不选择它呢?
首先, 我们先明确一点: 现在,在Vue的整个开发中都是不需要使用jQuery了。
那么, 就意味着为了方便我们进行一个网络请求, 特意引用一个jQuery, 你觉得合理吗?
jQuery的代码要1w+行,而Vue的代码才1w+行.引用用这个框架反而使得我们的项目更加臃肿。
所以完全没有必要为了用网络请求就引用这个重量级的框架。
Vue-resource的体积相对于jQuery小很多.
另外Vue-resource是官方推出的.
那我们为什么不选择它呢?
在Vue2.0推出后, Vue作者就在GitHub的Issues中说明了去掉vue-resource, 并且以后也不会再更新.
那么意味着以后vue-reource不再支持新的版本时, 也不会再继续更新和维护。对以后的项目开发和维护都存在很大的隐患。所以我们不引用它
axios有非常多的优点, 并且用起来也非常方便.
稍后, 我们对他详细学习.
在前端开发中, 我们一种常见的网络请求方式就是JSONP
使用JSONP最主要的原因往往是为了解决跨域访问的问题.
JSONP的原理是什么呢?
JSONP的核心在于通过
标签的src来帮助我们请求数据。原因是我们的项目部署在domain1.com服务器上时, 是不能直接访问domain2.com服务器上的资料的,会产生跨域问题。
这个时候, 我们利用标签的src帮助我们去服务器请求到数据, 将数据当做一个javascript的函数来执行, 并且执行的过程中传入我们需要的json。
所以, 封装jsonp的核心就在于我们监听window上的jsonp进行回调时的名称.
有时候, 我们可能需求同时发送两个请求,使用axios.all, 可以放入多个请求的数组.
axios.all([]) 返回的结果是一个数组,使用 axios.spread可将数组 [res1,res2] 展开为 res1, res2
在上面的示例中, 我们的BaseURL是固定的,事实上, 在开发中可能很多参数都是固定的。这个时候我们可以进行一些抽取, 也可以利用axiox的全局配置
axios.defaults.baseURL = ‘123.207.32.32:8000’
axios.defaults.headers.post[‘Content-Type’] = ‘application/x-www-form-urlencoded’;
为什么要创建axios的实例呢?
当我们从axios模块中导入对象时, 使用的实例是默认的实例。当给该实例设置一些默认配置时, 这些配置就被固定下来了。但是后续开发中, 某些配置可能会不太一样。比如某些请求需要使用特定的baseURL或者timeout或者content-Type等。这个时候, 我们就可以创建新的实例, 并且传入属于该实例的配置信息.
请求拦截中错误拦截较少,通常都是配置相关的拦截,
可能的错误比如请求超时,可以将页面跳转到一个错误页面中。
响应的成功拦截中,主要是对数据进行过滤。
响应的失败拦截中,可以根据status判断报错的错误码,跳转到不同的错误提示页面。
在开发中,有时候我们需要根据不同的环境设置不同的环境变量,常见的有三种环境:
let BASE_URL=""
Let BASE_ NAME=""
if(process.env.NODE_ ENV ==='development') {
BASE URL = 'URL'
BASE_ NAME =''
} else if (process.env .NODE ENV === 'production') {
BASE URL = 'URL'
BASE_ NAME =''
}else if (process.env .NODE ENV === 'test') {
BASE URL = 'URL'
BASE_ NAME =''
}
export {BASE_URL,BASSE_NAME}
在根目录下创建 “.env.test”, “.env.prodiction”, ".env.development"文件
文件里面写
VUE_APP_BASE_URL = URL(对应的URL)
VUE_APP_BASEA_NAME = name(对应的名字)、
使用的时候用法:process.env.VUE_APP_BASE_URL
process.env.VUE_APP_BASE_NAME