axios使用

axios和vue-resource一样,是一个vue中操作http的插件,遵循promise,vue官方也推荐使用axios。

安装axios

npm i axios -S

axios也是在运行时需要的,所以要保存在dependencies中。

引入axios

import axios from 'axios'
Vue.prototype.$http = axios

GET、POST示例

<template><div><router-link to="/news" tag="div">跳转到新闻页</router-link><router-link to="/video">跳转到视频页</router-link><router-view/><div @click="dataGet">GET</div><div @click="dataPost">POST</div></div>
</template><script>
export default {name: 'app',data () {return {addr: '/data.json'}},methods: {dataGet () {console.info('get')this.$http.get(this.addr, {params: {id: '1'},headers: {token: 'token'}}).then(res => {console.info(res.data)}).catch(err => {console.info(err)})},dataPost () {console.info('post')this.$http.post(this.addr, {id: '1'}, {headers: {token: 'token'}}).then(res => {console.info(res.data)}).catch(err => {console.info(err)})}}
}
</script>

axios还有并发多个请求(vue-resource不支持)、拦截器、配置型请求(类似jquery的ajax方法),不列了,一搜一大片,实际使用过程中再慢慢补充吧。

全局设置与拦截器

全局设置
axios实例中的defaults对象下可以全局设置该实例的参数,所有该实例的请求将使用此参数。
常用的三个:

// 基础地址,调用时会在每个请求前拼上这个地址
axios.defaults.baseURL = API.protocols + API.host + '/' + API.alias + '/' + API.version
// 超时时间
axios.defaults.timeout = API.timeout
// Content-Type设为表单
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

拦截器
axios中的拦截器可以全局拦截所有实例下的请求与响应,在请求发出前与响应到达本地但返回给promise前可以做一系列公共的操作,比如给请求参数统一加一个token,可以用拦截器做。
下面例子是给请求加一系列参数,那么每个请求只关注自己要传的业务参数就行,公共参数就不需要单独写了。

// 请求全局处理
axios.interceptors.request.use(function (config) {const isExamine = apiUtil.isExamine()if (config.method.toLowerCase() === 'get') {// get方法// 获取get参数let params = config.paramslet appid = ''if (params.appid) {appid = params.appid}let page = ''if (params.page) {page = params.page}let step = ''if (params.step) {step = params.step}// 实例化公共参数let commonParam = new apiUtil.ApiCommonParam(appid, page, step)// 重置参数config.params = {...commonParam,...params}// 测试期参数if (isExamine && isExamine === 'true') {config.params.isExamine = 'true'}} else if (config.method.toLowerCase() === 'post') {// post方法// 获取post消息体let data = config.dataconsole.info(data)let appid = ''if (data.appid) {appid = data.appid}let page = ''if (data.page) {page = data.page}let step = ''if (data.step) {step = data.step}// 重置参数let commonParam = new apiUtil.ApiCommonParam(appid, page, step)let requestData = {...commonParam,...data}// 测试期参数if (isExamine && isExamine === 'true') {requestData.isExamine = 'true'}// post默认使用payload方式提交数据,会造成参数无法从request中解析,需要把Content-Type设置为form之后,再用qs库转换一下config.data = qs.stringify(requestData)}return config
}, function (error) {return Promise.reject(error)
})

全局处理响应:

// 全局响应
axios.interceptors.response.use(function (response) {return response
}, function (error) {return Promise.reject(error)
})

完整的全局设置与拦截器的代码示例
api/index.js

import Vue from 'vue'
import axios from 'axios'
import qs from 'qs'
import {API} from '@/common/properties'
import * as apiUtil from '@/common/script/apiUtil'Vue.prototype.$http = axios// 基础地址,调用时会在每个请求前拼上这个地址
axios.defaults.baseURL = API.protocols + API.host + '/' + API.alias + '/' + API.version
// 超时时间
axios.defaults.timeout = API.timeout
// Content-Type设为表单,跨域时POST请求变为OPTIONS通过此项设置可解决
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'// 请求全局处理
axios.interceptors.request.use(function (config) {const isExamine = apiUtil.isExamine()if (config.method.toLowerCase() === 'get') {// get方法// 获取get参数let params = config.paramslet appid = ''if (params.appid) {appid = params.appid}let page = ''if (params.page) {page = params.page}let step = ''if (params.step) {step = params.step}// 实例化公共参数let commonParam = new apiUtil.ApiCommonParam(appid, page, step)// 重置参数config.params = {...commonParam,...params}// 测试期参数if (isExamine && isExamine === 'true') {config.params.isExamine = 'true'}} else if (config.method.toLowerCase() === 'post') {// post方法// 获取post消息体let data = config.dataconsole.info(data)let appid = ''if (data.appid) {appid = data.appid}let page = ''if (data.page) {page = data.page}let step = ''if (data.step) {step = data.step}// 重置参数let commonParam = new apiUtil.ApiCommonParam(appid, page, step)let requestData = {...commonParam,...data}// 测试期参数if (isExamine && isExamine === 'true') {requestData.isExamine = 'true'}// post默认使用payload方式提交数据,会造成参数无法从request中解析,需要把Content-Type设置为form之后,再用qs库转换一下config.data = qs.stringify(requestData)}return config
}, function (error) {return Promise.reject(error)
})// 全局响应
axios.interceptors.response.use(function (response) {return response
}, function (error) {return Promise.reject(error)
})export default axios

main.js中引用:

import './api'

简书中比较详细axios使用
https://www.jianshu.com/p/df464b26ae58

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery length 和 size()区别

jQuery length和size()区别总结如下&#xff1a; 1.length是属性&#xff0c;size()是方法。 2.如果你只是想获取元素的个数&#xff0c;两者效果一样既 $("img").length 和 $("img").size() 获取的值是一样的&#xff1b;但是如果是获取字符串的长…

一些关于自己的未来的东西

2019.7.4 自己大一建立对编程的基础认识&#xff0c;确实培养了一些兴趣&#xff0c;入了个门&#xff0c;不过没有接触到本质。大二加入到了学校的网站开发团队&#xff0c;对网站开发后端进行了学习&#xff0c;对后台开发也有了基础的学习吧&#xff0c;哈哈可能以后就是要走…

Javascript面向对象编程:构造函数的继承

今天要介绍的是&#xff0c;对象之间的"继承"的五种方法。 比如&#xff0c;现在有一个"动物"对象的构造函数。 function Animal(){ this.species "动物"; } 还有一个"猫"对象的构造函数。 function Cat(name,color){ this.name nam…

并发与多线程

并发 并发&#xff08;concurrency&#xff09;是指CPU在某个时间段内交替处理多任务的能力。每个CPU不可能只顾着执行某个进程&#xff0c;而让其他进程一直等待被执行。所以&#xff0c;CPU把可执行时间均分成若干份&#xff0c;每个进程执行一份或多份时间后&#xff0c;记录…

有没有朋友可以帮我解释一下贴水是什么意思?

通俗易懂的讲&#xff1a;贴水便宜&#xff0c;升水贵 当前&#xff0c;螺纹钢05合约就是贴水01合约 翻译&#xff0c;螺纹钢05合约就是比01合约便宜 升水同理 转载于:https://www.cnblogs.com/luoluo-123/p/11142229.html

es6常用点记录

letconst解构赋值字符串数组函数对象SymbolSetWeakSetMapWeakMapProxyreflectProxy与Reflex结合实例classpromiseiteratorGerneratorDecorators模块学习资料 let /* let 声明变量 *//* es6相对于es5的全局和局部作用域&#xff0c;多了一个块作用域&#xff0c;块作用域里声明的…

jquery插件封装指南

入门 编写一个jQuery插件开始于给jQuery.fn加入​​新的功能属性&#xff0c;此处添加的对象属性的名称就是你插件的名称&#xff1a; jQuery.fn.myPlugin function(){//你自己的插件代码};用户非常喜欢的$符号哪里去了&#xff1f; 它仍然存在&#xff0c;但是&#xff0c;为…

synchronize原理

synchronized的三种应用方式 一. 修饰实例方法&#xff0c;作用于当前实例加锁&#xff0c;进入同步代码前要获得当前实例的锁。 二. 修饰静态方法&#xff0c;作用于当前类对象加锁&#xff0c;进入同步代码前要获得当前类对象的锁。 三. 修饰代码块&#xff0c;指定加锁对象&…

不能修改“System Roots”钥匙串

iOS mac添加证书 不能修改“System Roots”钥匙串错误 如图&#xff1a; 解决方式&#xff1a; 打开钥匙串---登录---&#xff0c;直接把证书拖过来 然后&#xff0c;查看--我的证书&#xff0c;里面&#xff0c;找到证书&#xff0c;即可

stylus在vue中的使用

stylus是一个css预处理器&#xff0c;比较流行的css预处理器有sass、less、stylus&#xff0c;它们都一样&#xff0c;都是css的语法糖&#xff0c;可以使用变量&#xff0c;可以有简单的逻辑&#xff0c;使css的开发效率更高&#xff0c;更易维护。stylus来自node社区&#xf…

未来产品的设计

Donald A. Norman继《情感化设计》之后&#xff0c;又一设计精品力作&#xff1a; 未来产品的设计样章试读及本书预定&#xff1a;http://www.china-pub.com/195642市场价 &#xff1a;&#xffe5;39.00 会员价 &#xff1a; &#xffe5;29.25(75折) 【作  者】(美)Donald…

vue-cli webpack 配置分析

目录结构 . ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.c…

css之字体图标

SVG与字体图标 SVG图片是矢量图片&#xff0c;不会随着图片的伸缩而影响质量&#xff0c;通常把只有一种颜色的图标做成SVG&#xff0c;通过SVG生成字体图标&#xff0c;放到项目中使用。 https://icomoon.io/是一个比较快捷的生成字体图标的线上工具&#xff0c;进入主页后&…

history.back(-1)和history.go(-1)的区别

history.back(-1):直接返回当前页的上一页&#xff0c;数据全部消息&#xff0c;是个新页面 history.go(-1):也是返回当前页的上一页&#xff0c;不过表单里的数据全部还在 history.back(0) 刷新 history.back(1) 前进 history.back(-1) 后退

研发阶段模拟接口数据

因为在vue-cli工程中需要创建很多.vue文件&#xff0c;我们希望创建vue文件和创建html、css、js文件一样右键即可选择创建&#xff0c;并且创建的文件中可预先写好模板代码。 webstorm-Preferences打开选项界面 选择File and Code Templates&#xff0c;点击绿色加号 填…

真实项目中 ThreadLocal 的妙用

一、什么是 ThreadLocal ThreadLocal 提供了线程的局部变量&#xff0c;每个线程都可以通过 set() 和 get() 来对这个局部变量进行操作&#xff0c;但不会和其他线程的局部变量冲突&#xff0c;实现了线程间的据隔离。 简单讲&#xff1a;一个获取用户的请求线程 A&#xff0c;…

css之flex布局

flex布局是css3中的重要布局方式&#xff0c;称为“弹性布局”&#xff0c;每次想到它主要是遇到元素垂直居中、元素宽高自适应的问题&#xff0c;这些问题在flex中都能过简单设置就解决&#xff0c;它更像是原生APP中的布局操作&#xff0c;布局不必写N多的盒模型代码来实现&a…

javascript对URL中的参数进行简单加密处理

javascript的api本来就支持Base64&#xff0c;因此我们可以很方便的来进行编码和解码。 var encodeData window.btoa("namexiaoming&age10")//编码 var decodeData window.atob(encodeData)//解码。 下面来个具体的例子来说明如何对url中参数进行转码&#xff…

Fibinary Numbers

http://acm.hust.edu.cn/vjudge/contest/view.action?cid30506#problem/V 题意&#xff1a;从右向左&#xff0c;每一个位数&#xff0c;分别表示一个fibonacci数&#xff0c;1表示有&#xff0c;0表示没有&#xff1b;求两个数的和&#xff0c;同样按照这种形式存储 #include…

移动web开发DRP问题

DPR dpr问题是移动端web开发上需要注意的问题&#xff0c;用大白话说就是&#xff0c;代码中所设置的像素值实际上是虚拟像素&#xff0c;手机屏幕上的像素实际为物理像素&#xff0c;原始的手机&#xff0c;虚拟像素与物理像素是1:1覆盖的&#xff0c;但随着移动端屏幕的技术发…