Vue2整合axios发送请求

近期在做前后端分离的项目,前端计划采用VUE框架,后端采用Spring Cloud。

前端请求采用VUE整合axios方案,闲话不多说,开始!

1. 安装axios:

安装axios前,先采用vue-cli脚手架,创建一个vue的webpack项目,创建完成后形如下图:

安装axios,在package.json的目录启动命令行,进行安装:

cnpm install axios --save

安装后可在package.json中看到axios

2. 全局注册axios

为了使用axios,在各个组件中引入就可以使用,在main.js中引入axios

import axios from axios

此时如果在其他的组件中是无法使用axios命令的,需要改写Vue的原因属性

Vue.prototype.$axios = axios new Vue({ el: #app, router, axios, components: { App }, template: <App/> })

3. 使用axios

通过上述步骤,则可直接在之后的vue组件script中直接使用axios组件,例如下面的代码

methods: { submitForm(formName) { this.loginForm.message = console.log(this.loginForm.username + : + this.loginForm.password); this.$refs[formName].validate((valid) => { if (valid) { this.$axios({ method: post, url: :9999/sys/userinfo/login, params: { username: this.loginForm.username, password: this.loginForm.password } }).then(function (response) { if(response.data[success]){ console.log(response.data) this.loginForm.message = 登录成功! }else{ this.loginForm.message = response.data[msg]; } }.bind(this)).catch(function (response) { this.loginForm.message = 登录异常,请重新登录!; }.bind(this)); } else { return false; } }); } }

需要注意的事,上面axios中传递参数采用的是

params: { username: this.loginForm.username, password: this.loginForm.password }

此种参数传递即为requestparam,如果是采用requestbody的方式则应采用如下参数传递形式

data: { username: this.loginForm.username, password: this.loginForm.password }

详细说明可参照下面注释

{ //请求的接口,在请求的时候,如axios.get(url,config);这里的url会覆盖掉config中的url url: /user, // 请求方法同上 method: get, // default // 基础url前缀 baseURL: transformRequest: [function (data) { // 这里可以在发送请求之前对请求数据做处理,比如form-data格式化等,这里可以使用开头引入的Qs(这个模块在安装axios的时候就已经安装了,不需要另外安装)   data = Qs.stringify({}); return data; }], transformResponse: [function (data) { // 这里提前处理返回的数据 return data; }], // 请求头信息 headers: {X-Requested-With: XMLHttpRequest}, //parameter参数 params: { ID: 12345 }, //post参数,使用axios.post(url,{},config);如果没有额外的也必须要用一个空对象,否则会报错 data: { firstName: Fred }, //设置超时时间 timeout: 1000, //返回数据类型 responseType: json, // default }

另外需要注意的地方是,在请求结束后的then后续才做中,是无法直接获取vue视力中的数据的,需要进行数据绑定,即:

.then(function (response) { ... }.bind(this))

4. 结束

暂时写到此处,持续更新