参考文档:http://www.axios-js.com/zh-cn/docs/
axios库基本概念它是一个类库,基于promise管理的Ajax库
关于get
、post
方法的参数
url
第一个参数,请求的url地址
options
对象。
get方法1 2 3 4 5 6 7 8 9 axios.get('https://v1.hitokoto.cn/' , { params: { c: "b" } }).then(function (res ) { console .log(res); }).catch(function (err ) { console .log(err); })
get请求会把params中的键值对拼接成urlencode格式的字符串,然后以问号传递参数的形式,传递给服务器。
post方法post方法与get稍有些不同,其第二个参数直接传入对象即代表请求数据。
1 2 3 4 5 6 7 axios.post('https://v1.hitokoto.cn/' , { c: "b" }).then(function (res ) { console .log(res); }).catch(function (err ) { console .log(err); })
配置项中传递的内容都相当于请求的参数,传递的内容格式为x-www-form-urlencoded
关于请求返回的数据请求数据返回的是一个对象。
config
基于axios发送请求的时候做的配置项
data
从服务器获取的响应主体内容
headers
从服务器获取的响应的头信息
request
创建的Ajax实例
status
状态码
statusText
状态码的描述
axios的请求合并以及参数配置同时请求多个,只有当这几个请求同时成功才做响应。其返回结果为一个数组。
1 2 3 4 5 6 7 let sendArry = [ axios.get('https://v1.hitokoto.cn/' ), axios.get('https://v1.hitokoto.cn/' ), ] axios.all(sendArry).then(result => { console .log(result); })
1 2 3 4 5 6 7 8 9 let sendArry = [ axios.get('https://v1.hitokoto.cn/' ), axios.get('https://v1.hitokoto.cn/' ), ] axios.all(sendArry).then(axios.spread((resA, resB ) => { console .log(resA); console .log(resB); }))
通过一个参数配置项类似于Ajax,传入一个对象。在对象中写一些请求配置即可。
GET与POST相似。
1 2 3 4 5 6 7 8 9 axios({ method: "GET" , url: 'https://v1.hitokoto.cn/' , data: { c: "b" , } }).then(res => { console .log(res); });
请求配置常用的修改默认配置的方式
1 axios.defaults.baseURL = 'https://domain.com'
自定义成功失败规则
1 2 3 axios.defaults.validateStatus: function (status ) { return /^(2|3)\d{2}$/ .test(status) }
以上表示,当返回状态码为2xx或3xx都为成功,则都会执行then方法。
设置默认超时时间
1 axios.defaults.timeout = 3300 ;
设置默认请求头
1 2 3 axios.defaults.headers = { key:'value' }
设置post请求中基于请求主体向服务器发送的内容格式
1 2 3 4 5 6 7 8 9 10 11 12 axios.defaults.headers['content-Type' ] = 'application/x-www-form-urlencoded' ; axios.transformResponse = function (data ) { let str = `` ; for (let attr in data){ if (data.hasOwnProperty(attr)){ str += `${attr} =${data[attr]} &` } } return str.substring(0 ,str.length-1 ) }
默认为RAW,项目中常用的是x-www-form-urlencoded
设置响应拦截器
1 2 3 4 5 6 7 axios.interceptors.response.use(function success (result ) { return result.data },function error ( ) { })
设置默认baseURL后,在发送请求则无需写完整地址;例如:
1 2 3 4 axios.defaults.baseURL = 'https://v1.hitokoto.cn' axios.get('/?c=b' ).then(res => { console .log(res); })
完整的请求配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 { url: '/user' , method: 'get' , baseURL: 'https://some-domain.com/api/' , transformRequest: [function (data, headers ) { return data; }], transformResponse: [function (data ) { return data; }], headers: {'X-Requested-With' : 'XMLHttpRequest' }, params: { ID: 12345 }, paramsSerializer: function (params ) { return Qs.stringify(params, {arrayFormat : 'brackets' }) }, data: { firstName: 'Fred' }, timeout: 1000 , withCredentials: false , adapter: function (config ) { }, auth: { username: 'janedoe' , password: 's00pers3cret' }, responseType: 'json' , responseEncoding: 'utf8' , xsrfCookieName: 'XSRF-TOKEN' , xsrfHeaderName: 'X-XSRF-TOKEN' , onUploadProgress: function (progressEvent ) { }, onDownloadProgress: function (progressEvent ) { }, maxContentLength: 2000 , validateStatus: function (status ) { return status >= 200 && status < 300 ; }, maxRedirects: 5 , socketPath: null , httpAgent: new http.Agent({ keepAlive : true }), httpsAgent: new https.Agent({ keepAlive : true }), proxy: { host: '127.0.0.1' , port: 9000 , auth: { username: 'mikeymike' , password: 'rapunz3l' } }, cancelToken: new CancelToken(function (cancel ) { }) }