一. axios用法

参考:

  API文档: https://www.kancloud.cn/yunye/axios/234845

  GitHub: https://github.com/axios/axios

  其它博客:https://www.jianshu.com/p/d771bbc61dab

用到的服务器端接口:

     [Route("api/[controller]/[action]")]
[ApiController]
public class FirstController : ControllerBase
{ /******************************************下面是测试Get请求的相关方法***************************************************/ #region 下面是测试Get请求的相关方法
[HttpGet]
public string GetInfor1(string userName, string pwd)
{
return $"{userName}+{pwd}";
} [HttpGet]
public string GetInfor2([FromQuery]UserInfor model)
{
return $"{model.userName}+{model.pwd}";
}
[HttpGet]
//加上[FromQuery]也报错
public string GetInfor3([FromQuery]dynamic model)
{
return $"{model.userName}+{model.pwd}";
} #endregion }
[Route("api/[controller]/[action]")]
[ApiController]
public class ThirdController : Controller
{
[HttpGet]
public IActionResult GetInfor4(string userName, string pwd)
{
return Json(new
{
userName,
pwd
});
}
}

1.简介

  Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。具有以下特点:从浏览器中创建 XMLHttpRequests,从 node.js 创建 http 请求,支持 Promise API,拦截请求和响应,转换请求数据和响应数据,取消请求,自动转换 JSON 数据,客户端支持防御 XSRF。

  它封装了一些简易API方便快速使用,如axios.get、axios.post,也支持原始用法 axios({}),这点和JQuery还挺像的。

2.基本用法

(1). 形如axios.get().then().catch();

  在then中通过 ret.data获取返回值,特别注意这里的返回值会自动转换为json,因为responseType: 'json'(默认的), 错误会进入catch,这里和fetch不一样,像400、415、500等网络错误都可以进入到catch,不需要再单独处理。

代码分享:

                            axios.get('https://localhost:44387/api/First/GetInfor3?userName=ypf&pwd=123456')
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
console.log(error.response.status + '---' + error.response.statusText);
});

(2).Get请求

  A.用axios.get写法,可以直接在参数上拼接,也可以通过params属性写数据,当然也可附加一下额外的参数,如:headers、timeout等等。

  B.用axios原始写法, 利用params传递参数,实际上和直接拼接是完全一样的,当然也可附加一下额外的参数,如:headers、timeout等等。

代码分享:

                         //用法1
// axios.get('https://localhost:44387/api/First/GetInfor1?userName=123&pwd=hhh').then(function(ret) {
// console.log(ret.data)
// });
//用法2
axios.get('https://localhost:44387/api/First/GetInfor1', {
params: {
userName: 'ypf',
pwd: ''
},
//下面是一些额外参数
headers: {
'token': 'xxsdfsdfxx'
},
timeout: , }).then(function(ret) {
console.log(ret.data)
}) //get的原始写法
axios({
method: 'get',
url: 'https://localhost:44387/api/First/GetInfor1',
params: {
userName: 'lisi',
pwd:
},
headers: {
'token': 'xxsdfsdfxx'
},
}).then(function(ret) {
console.log(ret.data)
});

(3).Post请求

PS:其中Post请求有两种,分别是: "application/x-www-form-urlencoded"表单提交的方式 和 "application/json" Json格式提交的方式。

(1). Post的表单提交的格式为:"userName=admin&pwd=123456"。

(2). Post的Json的提交格式为:将实体(类)转换成json字符串。

A.用axios.Post写法(附带传递额外参数)

  a.表单提交:需要借助URLSearchParams参数进行传递。

  b.JSON提交:直接拼接,即为json提交 {userName: 'lisi', pwd: 123}

代码分享:

                        //表单提交
var params = new URLSearchParams();
params.append('userName', 'zhangsan');
params.append('pwd', '');
axios.post('https://localhost:44387/api/First/Login3', params).then(function(ret) {
console.log(ret.data)
})
//JSON提交
//默认是json格式传参的
axios.post('https://localhost:44387/api/First/Login2', {
userName: 'lisi',
pwd:
}).then(function(ret) {
console.log(ret.data)
})
//axios.post 传递额外参数 (json格式的提交)
axios.post('https://localhost:44387/api/First/Login2', {
userName: 'lisi',
pwd:
}, {
//下面是一些额外参数
headers: {
'token': 'xxsdfsdfxx'
},
timeout: ,
}).then(function(ret) {
console.log(ret.data)
});

B.用axios原始写法 (附带传递额外参数)

  a.表单提交: 借助URLSearchParams提交; 或者在data里写,但是用transformRequest转换一下也能达到效果。

  b.JSON提交: 直接在data属性里写就是JSON提交。

代码分享:

 //1.原始写法 post(JSON提交)
axios({
method: 'post',
url: 'https://localhost:44387/api/First/Login2',
data: {
userName: 'lisi',
pwd: 123
},
headers: {
'token': 'xxsdfsdfxx'
},
}).then(function(ret) {
console.log(ret.data)
}); //2. 原始写法 post(表单提交)用法1
var params = new URLSearchParams();
params.append('userName', 'zhangsan');
params.append('pwd', '111');
axios({
method: 'post',
url: 'https://localhost:44387/api/First/Login3',
data:params,
headers: {
'token': 'xxsdfsdfxx'
},
}).then(function(ret) {
console.log(ret.data)
}); //3. 原始写法 post(表单提交) 用法2
axios({
method: 'post',
url: 'https://localhost:44387/api/First/Login3',
//允许在向服务器发送前,修改请求数据
transformRequest: [function(data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret;
}],
data: {
userName: 'lisi',
pwd: 123
},
headers: {
'token': 'xxsdfsdfxx',
'Content-Type': 'application/x-www-form-urlencoded'
},
}).then(function(ret) {
console.log(ret.data)
});

4. 其它详细配置

这里只分析几个常用的,其它的详见上面的Api文档。

  (1).url: 用于请求URL

  (2).method: 请求方式,默认为get请求

  (3).params: 用于向URL上拼接地址,和直接在地址上拼接效果一样,用于get请求

  (4).data:作为请求主体被发送的数据,多用于POST请求

  (5).headers:请求表头

  (6).timeout:请求超时时间,单位毫秒

  (7).withCredentials:表示跨域请求时是否需要使用凭证,默认是false

  (8).responseType:表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json'(默认), 'text', 'stream'

  (9).baseURL: 拼接在url的前面

  (10).transformRequest: 允许在向服务器发送前,修改请求数据

  (11).transformResponse: 在传递给 then/catch 前,允许修改响应数据

5.全局默认设置

  全局配置baseUrl、全局配置Header、全局配置过期时间等等。

代码分享:

                         // 配置请求的基准URL地址
axios.defaults.baseURL = 'https://localhost:44387';
// 配置请求头信息
axios.defaults.headers['mytoken'] = 'hello';
axios.get('/api/First/GetInfor1', {
params: {
userName: 'ypf',
pwd: '1234'
},
}).then(function(ret) {
console.log(ret.data)
})

6. 拦截器

  (1).可以在请求发送前拦截,比如添加header。

  (2).在响应后进行拦截,比如返回: ret.data(), 后面就可以直接用了。

 1                         //请求前拦截
axios.interceptors.request.use(function(config) {
// console.log(config.url)
config.headers.mytoken = 'nihao'; //设置一下header
return config;
}, function(err) {
console.log(err)
});
//响应后拦截
axios.interceptors.response.use(function(res) {
var data = res.data;
return data;
}, function(err) {
console.log(err)
});
//这样这里可以直接使用data了
axios.get('https://localhost:44387/api/First/GetInfor1', {
params: {
userName: 'ypf',
pwd: '1234'
},
}).then(function(data) {
console.log(data)
});

7. 其它用法补充: 取消请求和并发请求

   详见Api文档。

二. async异步编程

1.async作为一个关键字放到函数前面,任何一个 async 函数都会隐式返回一个 promise。

2.await 关键字只能在使用 async 定义的函数中使用,后面可以直接跟一个 Promise实例对象,await函数不能单独使用。

3.async/await 让异步代码看起来、表现起来更像同步代码。

             var vm = new Vue({
el: '#myApp2',
methods: {
handle1: async function() {
var ret1 = await axios.get('https://localhost:44387/api/Third/GetInfor4?userName=ypf&pwd=123456');
var userName = ret1.data.userName;
var pwd = ret1.data.pwd;
//可以直接在后面捕捉错误
var ret2 = await axios.post('https://localhost:44387/api/First/Login2', {
userName: userName+'001',
pwd: pwd+'001'
}).catch(error=>{
console.log(error); });
// console.log(ret2.data);
return ret2.data;
}
}
});

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

第六节:前后端交互之axios用法及async异步编程的更多相关文章

  1. 第五节: 前后端交互之Promise用法和Fetch用法

    一. Promise相关 1.说明 主要解决异步深层嵌套的问题,promise 提供了简洁的API 使得异步操作更加容易 . 2.入门使用 我们使用new来构建一个Promise Promise的构造 ...

  2. 三、vue前后端交互(轻松入门vue)

    轻松入门vue系列 Vue前后端交互 六.Vue前后端交互 1. 前后端交互模式 2. Promise的相关概念和用法 Promise基本用法 then参数中的函数返回值 基于Promise处理多个A ...

  3. Vue-CLI项目-axios模块前后端交互(类似ajax提交)

    08.31自我总结 Vue-CLI项目-axios前后端交互 一.模块的安装 npm install axios --save #--save可以不用写 二.配置main.js import axio ...

  4. js前后端交互

    1.前后端交互模式 2.promise用法 (1)异步调用 (2)ajax回顾 (3).promise 优点:可以解决回调地狱(多层异步调用嵌套问题)(解决代码可读性低的问题) 提供简洁的api (4 ...

  5. Node之简单的前后端交互

    node是前端必学的一门技能,我们都知道node是用的js做后端,在学习node之前我们有必要明白node是如何实现前后端交互的. 这里写了一个简单的通过原生ajax与node实现的一个交互,刚刚学n ...

  6. Django之META与前后端交互

    Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请 ...

  7. 前后端交互实现(nginx,json,以及datatable的问题相关)

    1.同源问题解决 首先,在同一个域下搭建网络域名访问,需要nginx软件,下载之后修改部分配置 然后再终端下cmd  nginx.exe命令,或者打开nginx.exe文件,会运行nginx一闪而过, ...

  8. springboot+mybatis+thymeleaf项目搭建及前后端交互

    前言 spring boot简化了spring的开发, 开发人员在开发过程中省去了大量的配置, 方便开发人员后期维护. 使用spring boot可以快速的开发出restful风格微服务架构. 本文将 ...

  9. 百度ueditor的图片上传,前后端交互使用

    百度ueditor的使用 一个文本编辑器,看了网上很多文档写的很乱,这里拾人牙慧,整理下怎么使用. 这个东西如果不涉及到图片附件上传,其实很简单,就是几个前端文件,直接引用,然后配置下ueditor. ...

随机推荐

  1. 11g RAC添加用户表空间(数据文件)至文件系统(File System)的修正

    前提:非TEMP.UNDO和SYSTEM表空间,这仨是大爷,您得搂着点.来自博客园AskScuti .客户是添加临时表空间数据文件时,不小心 ADD 到了文件系统中,然后发现,后悔了,还在OS层面 R ...

  2. ISCC2018_leftleftrightright-Writeup

    leftleftrightright(150) 这个题学到了不少东西,值得认真写一下 下载好文件后发现是upx的壳,upx -d直接脱掉后运行,发现是经典的check输入的题目(作为一个linuxer ...

  3. springmvc的框架搭建及工作流程

    1.搭建要点 web.xml: <servlet-mapping>     <servlet-name>springDispatcherServlet</servlet- ...

  4. mysql查询速度慢的分析和解决

    一.定位执行慢的sql,如2秒内没执行完的抽取出来 show engines;查看慢查询时间show variables like 'slow%';查看设置多久是慢查询show variables l ...

  5. ts中接口的用法

    ts中的接口主要的作用是: 对“对象”进行约束描述 对“类”的一部分行为进行抽象 一.属性接口 接口中可定义 确定属性.可选属性.任意属性.只读属性 1.确定属性 interface UserInfo ...

  6. nginx知识学习

    设备: macbook 有用的命令行: sudo nginx -t  测试nginx是否正常 sudo nginx -s reload  平滑重启 配置目录: /usr/local/etc/nginx ...

  7. Docker - 构建一个简单的应用镜像

    概述 做个简单的可用镜像 背景 之前的镜像, 都是 命令教程 类的 这次我想构建一个 可以用的 简单镜像镜像 1. 环境 os centos7 docker 18.09 docker image ja ...

  8. 使用pdf.js显示pdf文件

    <script type="text/javascript" src="build/pdf.min.js"></script> < ...

  9. mysql忘记密码,更改密码

    对MySQL有研究的读者,可能会发现MySQL更新很快,在安装方式上,MySQL提供了两种经典安装方式:解压式和一键式,虽然是两种安装方式,但我更提倡选择解压式安装,不仅快,还干净.在操作系统上,My ...

  10. es7实现数学乘方

    //math.pow简写方法 console.log(2 ** 6)