axios的Content-Type类型导致后台无法解析数据

四种常见POST 请求的 Content-Type数据类型:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json  (axios中默认请求头的编码)
  • text/xml

1. application/x-www-form-urlencoded

      1.1 用 URLSearchParams 传递参数

let param = new URLSearchParams()
param.append('username', 'admin')
param.append('pwd', 'admin')
axios({
    method: 'post',
    url: '/api/lockServer/search',
    data: param
})

需要注意的是: URLSearchParams 不支持所有的浏览器,但是总体的支持情况还是 OK 的,所以优先推荐这种简单直接的解决方案

    1.2  配置axios请求头中的content-type为指定类型

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
{headers:{'Content-Type':'application/x-www-form-urlencoded'}}

    1.3  将参数转换为query参数, 利用qs

        引入 qs ,这个库是 axios 里面包含的,不需要再下载了。

import Qs from 'qs'
let data = {
    "username": "cc",
    "psd": "123456"
}

axios({
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    method: 'post',
    url: '/api/lockServer/search',
    data: Qs.stringify(data)
})

2  Content-Type: multipart/form-data

对于这种类型的数据,我们常见前端页面上传个人图像,然后点击保存发送后端修改原始数据。解决办法下:

let params = new FormData()
        params.append('file', this.file)
        params.append('id', localStorage.getItem('userID'))
        params.append('userName', this.name)
        params.append('sex', this.sex)
        params.append('mobile', this.phone)
        params.append('email', this.email)
        params.append('qq', this.qq)
        params.append('weChat', this.WeChat)

        axios.post(URL, params, {headers: {'Content-Type': 'multipart/form-data'}}).then(res => {
          if (res.data.code === 0) {
            this.$router.go(-1)
          }
        }).catch(error => {
          alert('更新用户数据失败' + error)
        })

  

猜你喜欢

转载自www.cnblogs.com/caoleyun/p/12767744.html
今日推荐