美文网首页
Vue中Axios api 接口调用和Form表单提交

Vue中Axios api 接口调用和Form表单提交

作者: chenyuanyi | 来源:发表于2017-12-11 14:14 被阅读0次

    Axios介绍

    Axios 详细资料:https://www.kancloud.cn/yunye/axios/234845

    Axios使用

    在src/api/index.js中配置axios

    // 配置API接口地址
    var root = 'http://127.0.0.1:8620/api'
    // 引用axios
    var axios = require('axios')
    // 自定义判断元素类型
    function toType (obj) {
      return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
    }
    // 参数过滤函数
    function filterNull (o) {
      for (var key in o) {
        if (o[key] === null) {
            delete o[key]
        }
        if (toType(o[key]) === 'string') {
          o[key] = o[key].trim()
        } else if (toType(o[key]) === 'object') {
          o[key] = filterNull(o[key])
        } else if (toType(o[key]) === 'array') {
          o[key] = filterNull(o[key])
        }
      }
        return o
    }
    //定义一个Axios封装方法
    function apiAxios (method, url, params, success, failure) {
      if (params) {
        params = filterNull(params)
      }
      axios({
        method: method,
        url: url,
        // `data` 是作为请求主体被发送的数据
        // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
        data: method === 'POST' || method === 'PUT' ? params : null,
        // `params` 是即将与请求一起发送的 URL 参数
        params: method === 'GET' || method === 'DELETE' ? params : null,
        baseURL: root,
        withCredentials: false //表示跨域请求时是否需要使用凭证
      })
      .then(function (res) {
        if (res.data.status === 0) {
          if (success) {
             console.log(res.data)
            //success(res.data)
          }
        } else {
          if (failure) {
             console.log(res.data) 
            //failure(res.data)
          } else {
            window.alert('error: ' + JSON.stringify(res.data))
          }
        }
      })
      .catch(function (err) {
        let res = err.response
        if (err) {
          window.alert('api error, HTTP CODE: ' + res.status)
        }
      })
    }
    
    // 返回在vue模板中的调用接口
    export default {
      get: function (url, params, success, failure) {
        return apiAxios('GET', url, params, success, failure)
      },
      post: function (url, params, success, failure) {
        return apiAxios('POST', url, params, success, failure)
      },
      put: function (url, params, success, failure) {
        return apiAxios('PUT', url, params, success, failure)
      },
      delete: function (url, params, success, failure) {
        return apiAxios('DELETE', url, params, success, failure)
      }
    }
    

    修改 src/main.js 绑定 src/api/index.js 文件

    // 引用API文件
    import api from './api/index.js'
    // 将API方法绑定到全局
    Vue.prototype.$api = api
    

    测试,调用接口:

    <template>
      <div>index page</div>
    </template>
    <script>
    export default {
      created () {
        this.$api.get('/topics', null, r => {
          console.log(r.data)
        })
      }
    }
    </script>
    

    在浏览器中打开控制台,看看 console 下面有没有输出入下图一样的内容:


    图一

    Axios响应拦截器:

    图二
    图三

    模拟Form表单提交:

    图四
    图五

    相关文章

      网友评论

          本文标题:Vue中Axios api 接口调用和Form表单提交

          本文链接:https://www.haomeiwen.com/subject/gfkiixtx.html