欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

axios使用

程序员文章站 2022-07-02 21:24:26
...
import axios from 'axios'

/**
 * axios基本写法
 */
axios({
        method: 'get', // post && get 
        url: 'xxx'
    })
    .then((response) => {
        console.log(response)
    })
    .catch((error) => {
        console.log(error)
    })

/**
 * API
 */
axios.get('url', {
        params: {
            abc: 'miaov',
            miaov: 'ketang'
        }
    })
    .then((response) => {
        console.log(response)
    })
    .catch((error) => {
        console.log(error)
    })

axios.post('url', {
        miaov: '课堂'
    })
    .then((response) => {
        console.log(response)
    })
    .catch((error) => {
        console.log(error)
    })

/**
 * 自定义请求配置
 */
//将query转字符串的模块
import queryString from 'queryString'

//创建取消请求令牌
let CancelToken = axios.CancelToken
let soure = CancelToken.source()

let HTTP = axios.create({
    baseURL: 'http://www.easy-mock.com/mock/59b39382e0dc663341a33b53/example/',
    timeout: 1000, //延时多少毫秒停止执行
    responseType: 'json',
    params: {
        book: '123'
    },
    headers: {
        'custome-header': 'miaov',
        'content-type': 'application/x-www-form-urlencoded' //转换data展现形式
    },
    transformRequest: [function (data) { //相当于中间件,用作发送数据转换(处理),data参数为发送的ajax请求的data值
        // console.log(data)
        data.age = 20 //可以在函数里自行添加数据
        return queryString.stringify(data) //必须有返回值,要不是无法将数据传送出去
    }],
    transformResponse: [function (data) { //用作返回数据的转换
        // console.log(data)
        data: abc = 'miaov' //一样可以自行添加返回数据
        return data //必须有返回值,否则请求的的返回值为undefined
    }],
    validateStatus(status) { //判断状态码多少属于成功,多少属于失败;比较少使用
        return status < 400
    },
    CancelToken: source.token //需要使用再进行配置
})

// 使用方法:
HTTP.post('miaov', {
        miaov: 'ketang', //使用queryString.stringify() API只会把数据转成 miaov:ketang username:leo的字符串形式
        username: 'leo' //如果想转成miaov=ketang&username=leo形式,就需要在头部添加content-type
    })
    .then((response) => {
        console.log(response)
    })
    .catch((error) => {
        if (axios.isCancel(error)) { //判断人为取消请求还是服务器请求失败
            console.log(error.message)
        } else {
            console.log(error)
        }

        // 取消请求调用
        source.cancel('用户人为取消操作....')

    })

/**
 * 并发请求
 */
function http1() {
    return HTTP.get('miaov1')
}

function http2() {
    return HTTP.post('miaov2')
}

axios.all([http1(), http2()]) //axios.all(iterable) 并发请求
    .then(axios.spread((res1, res2) => { //axios.spread(callback) 接收并发请求并将返回的请求数据拆分
        console.log(res1)
        console.log(res2)
    }))
    .catch((error) => {
        console.log(error)
    })

/**
 * 全局拦截器
 */
//拦截请求
HTTP.interceptors.request.use(function (config) { //请求拦截,参数为自定义配置项信息
    //在发送请求前做某些事情
    return config //写上返回值才能发送成功
}, function (error) {
    //请求错误时做些事
    return Promise.reject(error)
})

//拦截响应
HTTP.interceptors.response.use()

//取消拦截
HTTP.interceptors.request.eject(myInterceptpor)

/**
 * vue全局引用axios
 */
// npm install axios vue-axios --save
// Vue.use(VueAxios,Axios)
// this.$http[method]()

//如:
this.$http.get('url')
    .then((response) => {
        console.log(response)
    })
    .catch((error) => {
        console.log(error)
    })

//自定义配置使用:
Vue.prototyte.$http = HTTP


/**
 * PS:引用axios有三种方法:
 *  1.组件单独引用
 *  2.全局引用
 *  3.vuex中单独封装,封装在actions函数中,当单独组件需要使用时,直接dispatch('ajaxHandle')进行调用
 *      (1).    http://www.jb51.net/article/110324.htm  详细使用方式
 */