axios 源码分析(上) 使用方法

axios是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它可以在浏览器和node环境下运行,在github上已经有六七万个星了,axios使用很方便,很多人在使用他,vue官方也推荐使用axios了,技术这东西还是随主流吧,大家都用肯定有它的特长所在。

axios现在最新的版本的是v0.19.0,实现代码也很好理解。我们本节先说一下它的使用方法,然后来分析一下它的实现源码

我们可以使用两种方式来创建一个axios实例:

  ·一种是直接调用axios(config) 

  ·另一种是调用axios.create(config)来自定义配置新建一个axios实例。

、config可以是一个url地址(此时表示发送get请求),也可以是一个对象,对象可以含有如下属性:

  url                  ;请求的地址
  method                ;请求的类型                    ;可以是get、post、head、options、delete、put、patch之一
  data                  ;发送的数据                    ;作为请求主体被发送的数据,只适用于PUT、POST、PATCH之一
  baseURL                 ;将自动加在url前面        
  params                ;即将与请求一起发送的url参数      
  paramsSerializer      ;负责params序列化的函数         ;一般可以忽略,axios内部可以自动序列化的
  timeout                ;超时时间(0表示无超时时间)
  responseType          ;服务器响应的数据类型            ;可以是arraybuffer、blob、document、json、text、stream之一
  onUploadProgress    ;上传处理进度事件
  onDownloadProgress    ;下载处理进度事件

、axios的配置有两种默认配置方式:
    全局的axios默认值     通过修改axios.default上的属性来设置                 ;例如:axios.defaults.baseURL = ‘https://api.example.com‘;
    自定义实例默认值      可以传入一个配置对象,用该对象新建一个axios实例      ;例如:var myaxios = axios.create({baseURL:‘/ajax‘})

、举个栗子,有个需求是这样的:有一个输入框,对应两个按钮,点击一个按钮则请求数据库使按钮里的值+10,点击另外一个按钮则使按钮里的值减5。

writer by:大沙漠 QQ:22969969

首先我们定义两个php接口文件,分别为add.php和sub.php,add.php如下:

sub.php如下:

他们的路劲分别为http://j.com/ajax/add.php和http://j.com/ajax/sub.php,这是前后端分离典型的一个接口目录,注意add.php的请求方式是get请求,而post.php是post请求,然后我们写前端文件,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <input type="text" id="i">
    <button id="b1">递增10</button>
    <button id="b2">递增10(自定义配置)</button>
    <button id="b3">递减5</button>
    <script>
        axios.defaults.baseURL = ‘/ajax/‘;
        b1.onclick =function(){                                     //全局的axios默认值方法
            axios(‘/add.php?no=‘+i.value).then(res=>{
                if(res.data.code==0){
                    i.value = res.data.data.no
                }
            })
        }
        b2.onclick=function(){                                         //自定义的实例默认化
            var myaxios = axios.create({baseURL:‘/ajax‘})                //自定义配置,和按钮1的实现效果是一样的
            myaxios({
                url:‘/add.php‘,
                params:{no:i.value}
            }).then(res=>{
                if(res.data.code==0){
                    i.value = res.data.data.no
                }
            })
        }
        b3.onclick=function(){                                         //对于post请求来说
            axios({
                method:‘post‘,
                url:‘/sub.php‘,
                data:"no="+i.value
            }).then(res=>{
                if(res.data.code==0){
                    i.value = res.data.data.no
                }
            })
        }
    </script>
</body>
</html>

页面效果如下:

当我们点击递增10时,页面变为了如下:

点击第二个按钮后输入框也是等于10,点击递减5按钮后,输入框如下:

、为了方便起见,所有支持的方法都提供了别名,如下:

axios.get(url,config)              ;get请求的便捷方法 
    axios.delete(url,config)          ;delete请求的便捷方法
    axios.head(url,config)              ;head请求的便捷方法
    axios.post(url,data,config)          ;post请求的便捷方法
    axios.put(url,data,config)            ;put请求的便捷方法
    axios.patch(url,data,config)        ;patch请求的便捷方法

、因此实例的前端代码可以脚本可以修改一下,如下:

    <script>
        axios.defaults.baseURL = ‘/ajax/‘;
        b1.onclick =function(){                                     //全局的axios默认值方法
            axios.get(‘/add.php?no=‘+i.value).then(res=>{
                if(res.data.code==0){
                    i.value = res.data.data.no
                }
            })
        }
        b2.onclick=function(){                                         //自定义的实例默认化
            var myaxios = axios.create({baseURL:‘/ajax‘})
            myaxios.get(‘/add.php?no=‘+i.value).then(res=>{
                if(res.data.code==0){
                    i.value = res.data.data.no
                }
            })
        }
        b3.onclick=function(){                                         //对于post请求来说
            axios.post(‘/sub.php‘,{method:‘post‘,data:"no="+i.value}).then(res=>{
                if(res.data.code==0){
                    i.value = res.data.data.no
                }
            })
        }
    </script>

渲染结果是一样的,挺简单的吧,下一篇我们分析它的源码实现原理。

原文地址:https://www.cnblogs.com/greatdesert/p/11607103.html

时间: 2024-11-06 03:42:02

axios 源码分析(上) 使用方法的相关文章

BufferedReader源码分析之readLine方法

readLine方法是BufferedReader中一个非常常用的方法 使用它我们可以从一段输入流中一行一行的读数据 行的区分用"\r","\n"或者是"\r\n",下面就是BufferedReader中readLine的源代码 详细的分析都写在注释里了 String readLine(boolean ignoreLF) throws IOException { StringBuffer s = null; int startChar; sync

memcached学习笔记——存储命令源码分析上

原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command函数,探究memcached客户端的set命令,解读memcached是如何解析客户端文本命令,剖析memcached的内存管理,LRU算法是如何工作等等. 解析客户端文本命令 客户端向memcached server发出set操作,memcached server读取客户端的命令,客户端的连接状态

知识小罐头08(tomcat8启动源码分析 上)

前面好几篇都说的是一个请求是怎么到servlet中的service方法的,这一篇我们来看看Tomcat8是怎么启动并且初始化其中的组件的? 相信看了前面几篇的小伙伴应该对Tomcat中的各个组件不陌生了,所以我们就可以加快一点速度: 简单说一下Tomcat启动流程,首先是设置一下各种类加载器,然后加载server.xml配置文件,然后初始化Container各个容器,最后就是连接器Connector. 1.批处理文件 双击startup.bat文件启动tomcat,其实内部就是跳转到catali

【MyBatis源码分析】insert方法、update方法、delete方法处理流程(上篇)

打开一个会话Session 前文分析了MyBatis将配置文件转换为Java对象的流程,本文开始分析一下insert方法.update方法.delete方法处理的流程,至于为什么这三个方法要放在一起说,是因为: 从语义的角度,insert.update.delete都是属于对数据库的行进行更新操作 从实现的角度,我们熟悉的PreparedStatement里面提供了两种execute方法,一种是executeUpdate(),一种是executeQuery(),前者对应的是insert.upda

Spring IOC 容器源码分析 - getBean调用方法解析(三) -- 实例化 Bean 对象

1. createBeanInstance protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // 解析 bean ,将 bean 类名解析为 class 引用 Class<?> beanClass = resolveBeanClass(mbd, beanName); /* * 检测类的访问权限.默认情况下,对于非 public

JDK源码分析:hashCode()方法

提问: 1.hashCode()源码是怎么实现的. 2.hashCode()是为了配合基于散列的集合而设计的 3.hash数据结构,如何做到存取的时间复杂度为O(1)的.{函数算>逐个比较} 答案在以下链接中: 1. http://www.cnblogs.com/dolphin0520/p/3681042.html 2.

Hadoop-2.4.1学习之Map任务源码分析(上)

众所周知,Mapper是MapReduce编程模式中最重要的环节之一(另一个当然是Reducer了).在Hadoop-2.x版本中虽然不再有JobTracker和TaskTracker,但Mapper任务的功能却没有变化,本篇文章将结合源代码深入分析Mapper任务时如何执行的,包括处理InputSplit,mapper的输出.对输出分类等.在进行分析之前先明确几个概念:作业.任务.任务的阶段和任务的状态,可以将作业理解为要最终实现的功能或目的,比如统计单词的数量,而任务就是对该作业的拆分,只负

Linux驱动修炼之道-SPI驱动框架源码分析(上)【转】

转自:http://blog.csdn.net/lanmanck/article/details/6895318 SPI驱动架构,以前用过,不过没这个详细,跟各位一起分享: 来自:http://blog.csdn.net/woshixingaaa/article/details/6574215 SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式.相关通讯设备可工作于m/s模式.主设备发起数据帧,允许多个从设备的存在.每个从设备 有独立的片选信号,SPI一般来说是四线串

Android视图View绘制流程与源码分析(全)

来源:[工匠若水 http://blog.csdn.net/yanbober] 1 背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原理,记不记得最终分析结果就是下面的关系: 看见没有,如上图中id为content的内容就是整个View树的结构,所以对每个具体View对象的操作,其实就是个递归的实现. 前面<Android触摸屏事件派发机制详解与源码分析一(