当前位置: 首页 > news >正文

Axios入门

文章目录

  • 1. 前言
  • 2. Axios的基本概念与基本使用
    • 2.1 基本概念
    • 2.2 基本使用
      • 2.2.1 使用配置
      • 2.2.2 Get请求
      • 2.2.3 Post请求
    • 2.3 官方文档
  • 3. 总结

1. 前言

提到异步刷新,我们就要想到Ajax:Asynchronous Javascript And XML。它是一种Web数据交互方式,实现方式众多且灵活,例如 封装好的 jQuery、axios 等、或者使用WebSocket、Fetch等APIs实现、甚至可以自己造轮子。

本文介绍基于vue.js 、 node.js 环境下的 axios 的ajax 请求实现方式。

2. Axios的基本概念与基本使用

2.1 基本概念

Axios 通过 promise 实现 对ajax 技术的封装,我们可以把它理解成 Axios 是可以发出 http 请求的 JavaScript 库。

Axios 作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

基本特性:从浏览器创建 XMLHttpRequests、从 node.js 创建 http 请求、支持 Promise API、拦截请求和响应、转换请求和响应数据、取消请求、自动转换JSON数据、客户端支持防御XSRF。

以上概念大部分来自于官方文档,通过官方文档对Axios 的介绍,我们进一步了解了Axios 作用于什么环境,它大概是怎么实现ajax请求的。

2.2 基本使用

“实践是检验真理的唯一标准”,既然axios已经被大佬们封装起来了,那么我们就用起来!

本文的 axios 使用示例基于 vue-cli + vue 2.x 环境,读者可根据自身开发环境灵活参考。

2.2.1 使用配置

我们可以通过标签进行 axios 引入,也可以通过 npm 下载,例如:

    $ npm install axios

在本文示例的环境中,我们在vue cli 下下载并配置axios:

首先在vuecli项目的terminal中键入

    npm i axios -S

main.js配置

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

完成上述配置,我们就可以在前端项目中编写 axios 相关请求了。

2.2.2 Get请求

基本格式:

    const axios = require('axios');

// 向给定ID的用户发起请求
axios.get('/user?ID=12345')
  .then(function (response) {
    // 处理成功情况
    console.log(response);
  })
  .catch(function (error) {
    // 处理错误情况
    console.log(error);
  })
  .then(function () {
    // 总是会执行
  });

// 上述请求也可以按以下方式完成(可选)
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // 总是会执行
  });  

// 支持async/await用法
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

具体例子,例如我们在某个项目中,获取管理员列表:

 console.log('准备从服务器获取管理员列表……');
      let url = 'http://xxxxxx/xxxxxx/admins';
      this.axios.get(url).then((response) => {
        console.log('服务器端响应的结果:')
        console.log(response);
        let responseBody = response.data;
        if (responseBody.state == 20000) {
          this.tableData = responseBody.data;
        } else {
          this.$message.error(responseBody.message);
        }
      });

2.2.3 Post请求

基本格式:

    axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

并发的情况:

  function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

Promise.all([getUserAccount(), getUserPermissions()])
  .then(function (results) {
    const acct = results[0];
    const perm = results[1];
  });

具体例子,例如我们要在某个项目中实现"新增类别"的请求:

    this.$refs[formName].validate((valid) => {
        if (valid) {
          let url = 'http://xxxxxxxx/xxxxxx/categories/add-new';
          console.log('尝试添加类别……');
          console.log('请求路径:' + url);
          console.log('请求参数:' + this.ruleForm);
          console.log(this.ruleForm);
          let formData = this.qs.stringify(this.ruleForm);
          console.log('将ruleForm对象转换为FormData:');
          console.log(formData);
          //发起axios请求
          this.axios.post(url, formData).then((response) => {
            console.log('服务器端响应的结果:' + response);
            console.log(response);
            let responseBody = response.data;
            if (responseBody.state == 20000) {
              console.log('添加类别成功');
              this.$message({
                message: '添加类别成功!',
                type: 'success'
              });
              this.resetForm(formName);
            } else {
              console.log(responseBody.message);
              this.$message.error(responseBody.message);
            }
          });
          
        } else {
          console.log('error submit!!');
          return false;
        }
      });

2.3 官方文档

至于对 Axios 更深入的学习,例如通过axios实现,可以参考官方文档:
Axios 官方文档

3. 总结

本文介绍了ajax的基本概念以及axios这种ajax实现方式。异步请求的交互方式在前后端交互使用较多,读者入门后请多加应用、练习。

相关文章:

  • 数据库(mysql)主从复制与读写分离
  • Windbg 命令 (四)
  • 【华为机试真题JavaScript】分班
  • ctfshow SSRF
  • Nacos集群和持久化配置(重要)
  • SpringMVC框架
  • 【Arma3脚本教程】一、基本介绍
  • 【智能优化算法-粒子群算法】基于改进粒子群算法实现汽车动力传动参数优化设计附matlab代码
  • RK3399平台开发系列讲解(USB篇)URB通信过程详解
  • Golang-01Golang开发环境配置
  • Debezium系列之:永久保存history topic中的数据
  • 前端开发规范
  • 【halcon C++编程 序列化与反序列化】
  • 什么时候用Goroutine?什么时候用Channel?
  • OpenGL基础教程
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 0基础学习移动端适配
  • create-react-app做的留言板
  • ES学习笔记(12)--Symbol
  • js继承的实现方法
  • js写一个简单的选项卡
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • vue:响应原理
  • 安装python包到指定虚拟环境
  • 反思总结然后整装待发
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 通过几道题目学习二叉搜索树
  • 网络应用优化——时延与带宽
  • 详解移动APP与web APP的区别
  • 大数据全解:定义、价值及挑战
  • 带你开发类似Pokemon Go的AR游戏
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)Nginx简介和安装教程
  • (8)STL算法之替换
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Java)【深基9.例1】选举学生会
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (简单) HDU 2612 Find a way,BFS。
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (数据结构)顺序表的定义
  • (一)u-boot-nand.bin的下载
  • (译)2019年前端性能优化清单 — 下篇
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Core Web APi类库如何内嵌运行?
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET值类型变量“活”在哪?