axios的一些使用

axios的一些使用

1. axios的作用

    1.从浏览器中创建XMLHttpRequests
    2.从node.js中创建http请求
    3.支持PromiseAPI
    4.拦截请求和响应
    5.转换请求数据和响应数据
    6.取消请求
    7.自动转换JSON数据

2.axios的使用

封装axios
文件名 ajax.js
import axios from 'axios'
import qs from 'qs'

// 使用post请求,发送的是formdata格式的数据,设置请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 转换数据格式
axios.defaults.transformRequest = [function (data) {
  return qs.stringify(data)
}]
// 允许携带cookie
axios.default.withCredentials = true
// 封装请求
/*数据请求参数
* @param {object} options 请求参数选项
* url: 'xxx' 请求路径
* method: 'get/post' 请求方法
* data: {} post 请求参数
* params: {} get请求参数
* @param {boolean} isJson 是否是以json的形式请求数据
* */
export function ajax(options, isJson) {
  if (isJson) {
    options.headers = {'Content-Type': 'application/json'}
    options.transformRequest = [function (data) {
      return JSON.stringify(data)
    }]
  }
  return new Promise(((resolve, reject) => {
    options.method = options.method || 'GET'
    options.data = options.data || {}
    axios(options)
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err)
      })
  }))
}
axios的请求与响应拦截 及 取消请求

// 取消上一次请求
let cancelToken = axios.CancelToken
let cancel

//  添加请求拦截器
const  myInterceptor = axios.interceptors.request.use(function (config) {
  //取消上一次请求
  if (typeof cancel === 'function') {
    cancel()
  }
  config.cancelToken = new cancelToken(function executor (c) {
    //一个执行器函数接收一个取消函数作为参数
    cancel = c
  })
  // 在发送请求之前做些什么
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做些什么 ,可以统一处理请求返回的错误码,不用每次请求都去处理一次
  return response
}, function (error) {
  // 对响应错误做些什么 
  return Promise.reject(error)
})
// 取消拦截
axios.interceptors.request.eject(myInterceptor);

频繁点击,会发送多次请求,可以取消上一次请求,网速特好,请求很快的情况下,好像取消上次请求失效,可以使用flag标记,flag为true,禁止请求,请求返回之后,flag归为false

封装的axios的使用
在另起一个index文件index.js,发请求
import { ajax } from "./axios";  // 引入封装好的axios
// get请求
export const reqCp = params => ajax({
  url: 'xxxx',
  params
})
// post请求 参数为json格式
export const reqList = data => ajax({
  url: 'xxxxx',
  method: 'POST',
  data
},true) // 第二个参数 isJson为true
// post请求 参数为默认的fromdata格式
export const reqArticle = data => ajax({
  url: 'xxxxx',
  method: 'POST',
  data
})
下面是在vue中的使用
 import { reqCp, reqList, reqArticle } from './index' // 引入上面的请求
 调用:请求返回的是promise,所以支持promiseApi,也可以使用async awiat
 reqCp({key: value}).then(res => {
   console.log(res)
 })
 或者
 async click () {
  const cp = await reqCp({anchor_id: 'u123'})
  console.log(cp)
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值