vue中axios封装http请求

import Vue from 'vue'

import axios from 'axios'

import qs from 'qs'


//axios的一些公共配置和拦截器,比如发送请求显示loading,请求回来loading消失之类的


let loadTimeoutId;

//请求拦截配置;配饰author;携带token

axios.interceptors.request.use((config) => {
  loadTimeoutId = setTimeout(() => {
    new Vue({}).$vux.loading.show({
      text: 'Loading'
    });
  }, 500);
  setTimeout(() => {
    new Vue({}).$vux.loading.hide();
  }, 600);
  config.auth = {
    username: 'lin',
    password: 'lin'
  };
  console.log(config);
  return config
}, (error) => {
  clearTimeout(loadTimeoutId);
  //这里给'请求失败提示信息'
  return Promise.reject(error)
});

//响应拦截配置;根据后端返回的code码 做不同的处理

axios.interceptors.response.use((res) => {
  clearTimeout(loadTimeoutId);
  if (res.status == 200) {
    return res;
  }
}, (error) => {
  //这里给响应失败提示信息
  return Promise.reject(error)
});


let ajax = {
  get: (url, params, successCallback, errorCallback) => {
    axiosRequestParams(url, 'get', params, 10000, successCallback, errorCallback)
  },
  post: (url, params, successCallback, errorCallback) => {
    axiosRequestParams(url, 'post', params, 15000, successCallback, errorCallback);
  },
  //上传文件
  upload: (url, params, successCallback, errorCallback, formData) => {
    axiosRequestParams(url, 'post', params, 0, successCallback, errorCallback, formData)
  }
};

function axiosRequestParams(url, method, paramsOrData, timeout, successCallback, errorCallback, formData) {
  let params = {};
  let data = {};
  paramsOrData = paramsOrData || {};
  paramsOrData.accessToken = window.sessionStorage.getItem('myAccessToken');
  paramsOrData.accessUserId = window.sessionStorage.getItem('myUserId');

  if (method === 'get' || method === 'delete' || method === 'head') {
    params = paramsOrData;
  } else {
    //qs.parse()将URL解析成对象的形式
    //qs.stringify()将对象 序列化成URL的形式,以&进行拼接
    // axios post 传递是 在data中的;
    data = qs.stringify(paramsOrData)
  }

  //有formData 走这个
  if (formData != null) {
    for (let attr in paramsOrData) {
      formData.append(attr, paramsOrData[attr])
    }
  }

  axiosRequest({
    method: method,
    url: url,
    params: params,
    data: formData ? formData : data,
    timeout: 10000
  }, successCallback, errorCallback)
}

function axiosRequest(conf, successCallback, errorCallback) {
  axios({
    method: conf.method || 'get',
    url: conf.url,
    params: conf.params || {},
    data: conf.data,
    timeout: conf.timeout || 10000
  }).then((res) => {
    successCallback(res.data);
  }).catch((res) => {
    if (errorCallback) {
      errorCallback(res.data);
    }
  })
}

Vue.prototype.$ajax = ajax

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值