vue使用Axios做ajax请求详解


Posted in Javascript onJune 07, 2017

vue2.0之后,就不再对vue-resource更新,而是推荐使用axios

1. 安装 axios

$ npm install axios

$ bower install axios

2. 在要使用的文件中引入axios

import axios from 'axios'

3. 使用axios做请求

可以通过向 axios 传递相关配置来创建请求, 只有 url 是必需的。如果没有指定 method,请求将默认使用 get 方法。

{
 // `url` 是用于请求的服务器 URL
 url: '/user',

 // `method` 是创建请求时使用的方法
 method: 'get', // 默认是 get

 // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
 // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
 baseURL: 'https://some-domain.com/api/',

 // `transformRequest` 允许在向服务器发送前,修改请求数据
 // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
 // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
 transformRequest: [function (data) {
  // 对 data 进行任意转换处理

  return data;
 }],

 // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
 transformResponse: [function (data) {
  // 对 data 进行任意转换处理

  return data;
 }],

 // `headers` 是即将被发送的自定义请求头
 headers: {'X-Requested-With': 'XMLHttpRequest'},

 // `params` 是即将与请求一起发送的 URL 参数
 // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
 params: {
  ID: 12345
 },

 // `paramsSerializer` 是一个负责 `params` 序列化的函数
 // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
 paramsSerializer: function(params) {
  return Qs.stringify(params, {arrayFormat: 'brackets'})
 },

 // `data` 是作为请求主体被发送的数据
 // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
 // 在没有设置 `transformRequest` 时,必须是以下类型之一:
 // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
 // - 浏览器专属:FormData, File, Blob
 // - Node 专属: Stream
 data: {
  firstName: 'Fred'
 },

 // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
 // 如果请求话费了超过 `timeout` 的时间,请求将被中断
 timeout: 1000,

 // `withCredentials` 表示跨域请求时是否需要使用凭证
 withCredentials: false, // 默认的

 // `adapter` 允许自定义处理请求,以使测试更轻松
 // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
 adapter: function (config) {
  /* ... */
 },

 // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
 // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
 auth: {
  username: 'janedoe',
  password: 's00pers3cret'
 },

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

 // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
 xsrfCookieName: 'XSRF-TOKEN', // default

 // `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称
 xsrfHeaderName: 'X-XSRF-TOKEN', // 默认的

 // `onUploadProgress` 允许为上传处理进度事件
 onUploadProgress: function (progressEvent) {
  // 对原生进度事件的处理
 },

 // `onDownloadProgress` 允许为下载处理进度事件
 onDownloadProgress: function (progressEvent) {
  // 对原生进度事件的处理
 },

 // `maxContentLength` 定义允许的响应内容的最大尺寸
 maxContentLength: 2000,

 // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
 validateStatus: function (status) {
  return status >= 200 && status < 300; // 默认的
 },

 // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目
 // 如果设置为0,将不会 follow 任何重定向
 maxRedirects: 5, // 默认的

 // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
 // `keepAlive` 默认没有启用
 httpAgent: new http.Agent({ keepAlive: true }),
 httpsAgent: new https.Agent({ keepAlive: true }),

 // 'proxy' 定义代理服务器的主机名称和端口
 // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
 // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
 proxy: {
  host: '127.0.0.1',
  port: 9000,
  auth: : {
   username: 'mikeymike',
   password: 'rapunz3l'
  }
 },

 // `cancelToken` 指定用于取消请求的 cancel token
 cancelToken: new CancelToken(function (cancel) {
 })
}

为方便,所有支持的请求方法都提供了别名:

axios.request(config)

axios.get(url[, config])

axios.delete(url[, config])

axios.head(url[, config])

axios.post(url[, data[, config]])

axios.put(url[, data[, config]])

axios.patch(url[, data[, config]])

4. 请求的响应结构

{
 // `data` 由服务器提供的响应
 data: {},

 // `status` 来自服务器响应的 HTTP 状态码
 status: 200,

 // `statusText` 来自服务器响应的 HTTP 状态信息
 statusText: 'OK',

 // `headers` 服务器响应的头
 headers: {},

 // `config` 是为请求提供的配置信息
 config: {}
}

使用 then 时,你将接收下面这样的响应:

axios.get('/user/12345')
 .then(function(response) {
  console.log(response.data);
  console.log(response.status);
  console.log(response.statusText);
  console.log(response.headers);
  console.log(response.config);
 });

在使用 catch 时,响应可以通过 error 对象可被使用

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

5. 使用实例

el1: get请求

axios.get('/user', {
  params: {
   ID: 12345
  }
 })
 .then(function (response) {
  console.log(response);
 })
 .catch(function (error) {
  console.log(error);
 });

el2: post请求

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

el3: 执行多个并发请求

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

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

axios.all([getUserAccount(), getUserPermissions()])
 .then(axios.spread(function (acct, perms) {
  // 两个请求现在都执行完成
 }));

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript实现级联菜单的方法
Jun 29 Javascript
15个常用的jquery代码片段
Dec 19 Javascript
JS在onclientclick里如何控制onclick的执行
May 30 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
Jun 13 Javascript
JS只能输入正整数的简单实例
Oct 07 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
Dec 12 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
Node.js pipe实现源码解析
Aug 12 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
详解如何用模块化的方式写vuejs
Dec 16 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 Javascript
JavaScript ES 模块的使用
Nov 12 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 #Javascript
关于vue.js v-bind 的一些理解和思考
Jun 06 #Javascript
详解vue-cli开发环境跨域问题解决方案
Jun 06 #Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 #Javascript
详解Vue 开发模式下跨域问题
Jun 06 #Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
Jun 06 #Javascript
深入理解vue-loader如何使用
Jun 06 #Javascript
You might like
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
Python实现京东抢秒杀功能
2021/01/25 Python
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
八年级音乐教学反思
2014/01/09 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
北京申奥口号
2014/06/19 职场文书
环卫个人总结
2015/03/03 职场文书
公司老总年会致辞
2015/07/30 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP