在使用vue以及axios的过程中,需要将数据以表单形式提交给后台,现在总结一下处理方法。

axios 请求配置中,transformRequest配置允许在向服务器发送前,修改请求数据。


  // `transformRequest` 允许在向服务器发送前,修改请求数据
  // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
  // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
  transformRequest: [function (data) {
    // 对 data 进行任意转换处理

    return data;
  }],

因此可以使用该配置修改请求参数。

参考资料:https://www.kancloud.cn/yunye/axios/234845

处理方法一:


axios({
  url: '/user',
  method: 'post',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  },
  transformRequest: [function (data) {
    // Do whatever you want to transform the data
    let ret = ''
    for (let it in data) {
      ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
    }
    return ret
  }],
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})

当然可以在main.js中进行配置


// main.js

import Axios from 'axios'
import VueAxios from 'vue-axios'

const MyAxios = Axios.create({
  transformRequest: [function (data) {
    // 将数据转换为表单数据
    let ret = ''
    for (let it in data) {
      ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
    }
    return ret
  }],
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})

Vue.use(VueAxios, MyAxios)

参考链接:https://segmentfault.com/q/1010000008462977

处理方法二:

使用qs模块


axios({
  url: '/user',
  method: 'post',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  },
  transformRequest: [function (data) {
    data = Qs.stringify(data);
    return data;
  }],
  headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
})

此方法操作前,需要先安装qs

npm install --save qs

参考链接:https://blog.csdn.net/shooke/article/details/76038967

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐