网络请求的方式

  1. 传统的Ajax,基于XMLHttpRequest(不推荐)

    • 配置调用方式混乱(回调地狱)
  2. jQuery-Ajax (在vue开发中不推荐)

    • 相对于传统的Ajax非常好用
    • 但是jQuery的代码1w行,vue的代码1w行,在vue开发中,完全没有为了用网络请求就引用一个重量级的框架
  3. axios(推荐)

    • 在Vue-resource停止更新之后,axios是vue作者推荐的一款轻便的基于 promise 的 HTTP 库

认识Axios

  1. 可以理解为 ajax i/o system 的缩写
  2. 功能特点:
    • 在浏览器中发送 XMLHttpRequests 请求
    • 在 node.js 中发送 http请求
    • 支持 Promise API
    • 拦截请求和响应
    • 转换请求和响应数据
    • 。。。
  3. 支持多种请求方式:
    • axios(config)
    • axios.request(config)
    • axios.get(url[, config])
    • axios.delete(url[, config])
    • axios.head(url[, config])
    • axios.put(url[, data[, config]])
    • axios.patch(url[, data[, config]])

发送基本请求

  1.  **发送get请求演示**
    import axios from 'axios'
    export default {
    name:'app',
    created(){ //在vue的生命周期函数中
    //提问:为什么没有跨域的问题?
    //1.没有请求参数
    axios.get('http://123.207.32.32:8000/api/v1')
    .then(res=>{
    console.log(res);
    }).catch(err=>{
    console.log(err)
    }) //2.有参数
    axios.get('http://123.207.32.32:8000/api/v1',
    {params:{type:'sell',page:1}})
    .then(res=>{
    console.log(res)
    }).catch(err=>{
    console.log(err)
    })
    }
    }
  2.   **发送并发请求**
    created(){ //在vue的生命周期函数中
    axios.all([axios.get('http://123.207.32.32:8000/api'),
    axios.get('http://123.207.32.32:8000/api')],
    {params:{type:'sell',page:1}})
    .then(axios.spread((res1,res2)=>{
    console.log(res1);
    console.log(res2);
    }))
    }

全局配置

  1. 在开发中可能很多参数都是固定的,这个时候我们可以进行一些抽取, 也可以利用axiox的全局配置
  2.  //提取全局的配置
    axios.defaults.baseURL = 'http://123.207.32.32:8000'
    //发送并请求
    axios.all([axios.get('/api'),
    axios.get('/home'),
    {params:{type:'sell',page:1}}])
    .then(axios.spread((res1,res2)={
    console.log(res1);
    console.log(res2);
    }))
  3. 常见的全局配置
    • 1.请求地址:url: '/user'    2.请求类型:method: 'get',
    • 3.请根路径:baseURL: 'http://www.mt.com/api'   4.请求前的数据处理:transformRequest:[function(data){}],
    • 5.请求后的数据处理:transformResponse: [function(data){}]   6.自定义的请求头:headers:{'x-Requested-With':'XMLHttpRequest'},
    • 7.URL查询对象:params:{ id: 12 }   8.查询对象序列化函数:paramsSerializer: function(params){ }
    • 9.request body:data: { key: 'aa'}   10.超时设置s:timeout: 1000,
    • 11.跨域是否带Token:withCredentials: false   12.自定义请求处理:adapter: function(resolve, reject, config){},
    • 13.身份验证信息:auth: { uname: '', pwd: '12'}   14.响应的数据格式 json / blob /document /arraybuffer / text / stream:responseType: 'json',

axios的实例

  1. 为什么要创建axios的实例呢?
  • 当给该实例设置一些默认配置时, 这些配置就被固定下来了.但是后续开发中, 某些配置可能会不太一样.
  • 这个时候, 我们就可以创建新的实例, 并且传入属于该实例的配置信息.
  1.  //创建新的实例
    const axiosInstance =axios.create({
    baseURL:'http://123.207.32.32:8000',
    timeout:5000,
    headers:{
    'Content-Type':'application/x-www.from-urlencoded'
    }
    //发送网络请求
    axiosInstance({
    url:'/api',
    method:'get',
    }).then(res=>{
    console.log(res);
    }).catch(err=>{
    console.log(err);
    })
    })

axios封装

  1.  //创建的axios文件中
    import originAxios from 'axios'
    export default function axios(option){
    return new Promise((resolve,reject)={
    //1.创建axios实例
    const instance = originAxios.create({
    baseURL:'/api',
    timeout:5000,
    headers:''
    }); //2.传入的对象进行网络请求(optiond)
    instance(option).then(res=>{
    resolve(res);
    }).catch(err=>{
    reject(err);
    })
    //对第二步的简写(因为axios本身返回的就是一个Promise)
    //去掉export下面return Promise的那一行
    return instance(config)
    })
    }

Axios拦截器

  1. axios提供了拦截器,用于我们在发送每次请求或者得到相应后,进行对应的处理
  2.  **请求拦截**
    instance.interceptors.request.use(config=>{
    console.log('来到了request拦截的success中')
    // 1.当发送网络请求时,在页面中添加了一个loading组件,作为动画 // 2. 某些请求要求用户必须登陆,判断用户是否有token,如果没有token跳转到login页面 // 3.对请求的参数进行序列化
    config.data =qs.stringify(config.data)
    console.log(config) //当拦截完了一定要记得将拦截返回
    return config
    }) use()中还有一个err参数,表示请求错误后的拦截,请求拦截中错误拦截比较少,通常都是配置相关的拦截,可能的错误比如请求超时时,可以将页面跳转到一个错误的页面中
  3.    **响应拦截**
    响应的成功拦截中,主要是对数据进行过滤
    instance.interceptors.response.use(response=>{
    console.log("来到了response拦截success中");
    return response.data
    响应失败的拦截中,可以根据status判断报错的错误码,跳转到不同的错误提示页面
    },err => {
    console.log('来到了response拦截的failure中')
    if( err && err.response){
    switch(err.response.status){
    case 400:
    err.message = '请求错误',
    break;
    case 401:
    err.message = '未授权的访问',
    break;
    }
    }
    return err
    })

axios学习和使用的更多相关文章

  1. axios学习笔记

    axios学习笔记axios文档源地址:https://github.com/axios/axios0.概念axios 在NPM上的描述是:Promise based HTTP client for ...

  2. axios 学习笔记

    官方文档地址:https://github.com/axios/axios axios 是一个基于 Promise 的HTTP库,可以用在浏览器和 node.js 中 特性: • 从浏览器发起 XML ...

  3. axios学习 - 数据获取及渲染

    在app.vue和main.js中引入axios(import axios from 'axios') 基本代码: axios.get('/axios.json') .then(function(re ...

  4. vue学习之ajax 简单快速使用axios

    vue2.x 推荐使用axios 1.首先使用安装 npm install axios -S 2.在哪用在哪引入 import axios from 'axios' 或则在main.js 中引入 在申 ...

  5. axios浏览器异步请求方法封装 XMLHttpRequest

    axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...

  6. axios源码入口以及公用方法

    axios学习笔记(公用方法) 源码地址 找到入口文件 axios/lib/axios.js var utils = require('./utils'); var bind = require('. ...

  7. defaults(默认配置)和mergeConfig(合并config方法)

    axios学习笔记defaults(默认配置)和mergeConfig(合并config方法) 源码地址 找到入口文件 axios/lib/axios.js ... var mergeConfig = ...

  8. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装

    1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限.服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文. 2. ...

  9. vue学习目录 vue初识 this指向问题 vue组件传值 过滤器 钩子函数 路由 全家桶 脚手架 vuecli element-ui axios bus

    vue学习目录 vue学习目录 Vue学习一之vue初识 Vue学习二之vue结合项目简单使用.this指向问题 Vue学习三之vue组件 Vue学习四之过滤器.钩子函数.路由.全家桶等 Vue学习之 ...

随机推荐

  1. 致初学者(二): HDU 2014~ 2032题解

    下面继续给出HDU 2014~2032的AC程序,供大家参考.2014~2032这19道题就被归结为“C语言程序设计练习(三) ”~“C语言程序设计练习(五) ”. HDU 2014:青年歌手大奖赛_ ...

  2. python django+bootstrap4+mysql智慧交通系统构建

    之前,我做了一个实训的项目,但是一直没有展示如何做的,现在就让我讲解一下如何用django+bootstrap4+mysql实现这个智慧交通系统.这里用到的是网页的bootstrap4框架和mysql ...

  3. jvm 内存溢出

    堆内存溢出 堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java heap space 永久代溢出 类的一些信息,如类名.访 ...

  4. FEDay会后-Serverless与云开发,可能是前端的下一站

    进化本身是生物体与环境之间持续不断的信息交换的具体表现. -- 摘自<信息简史> 很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识 ...

  5. 面试官: 聊一聊Babel

    点击关注本公众号获取文档最新更新,并可以领取配套于本指南的 <前端面试手册> 以及最标准的简历模板. 前言 Babel 是现代 JavaScript 语法转换器,几乎在任何现代前端项目中都 ...

  6. [VB.NET Tips]字符串分隔

    在实际应用中,很多场景下都需要分隔字符串,如解析CSV文件等. 一般我们使用split方法来按照指定的分隔符来进行分隔字符串获得一个数组. Split方法的签名是: Split(ParamArray ...

  7. mysql-connector-java-5.-bin.jar 下载方法

    访问https://downloads.mysql.com/archives/c-j/,选择相应版本,如图 加油zip即可得到

  8. docker安装centos6

    1,获取Centos镜像>docker pull centos:centos6 2,查看镜像运行情况>docker images centos 3,在容器下运行 shell bash> ...

  9. Java匹马行天下之 Java国出了个Java——举国欢庆

    Java帝国的崛起 前言: 看庭前花开花落,宠辱不惊, 望天上云卷云舒,去留无意. 闹心的事儿,选择释怀: 纠缠的人儿,试着放下, 生活其实很美. 心若向阳,就无惧悲伤. 愿你明朗坦荡纵情豁达,有得有 ...

  10. C#之WPF连接sqllite数据库

    using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; namespa ...