axios发送的json怎么变成这个鬼样子,有谁知道怎么解决吗?

clipboard.png

Axios.post('http://localhost:9090/teacher/save',JSON.stringify(this.teacher))
                        .then(res=>{
                            console.log('res=',res)
                        })
                        .catch(err=>{

                        })

clipboard.png

Axios.post('http://localhost:9090/teacher/save',this.teacher, {headers: {"Content-Type": "application/json"}})
                        .then(res=>{
                            console.log('res=',res)
                        })
                        .catch(err=>{

                        })

我设置了application/json,但是从图中可以看出发送的并不是json格式,而是a=&b=这样的格式,是不是哪里配置的有问题

阅读 9k
5 个回答

大家听我说,问题已经解决了,原来我的另外一个文件里面有个axios拦截器,去掉就好了,打扰各位了,不过非常谢谢你们:)

import axios from 'axios'

// //调用Axios请求之前加载
//Axios请求拦截器,随着业务的复杂,Axios层的使用将会越来越复杂,写个精简版的就行了。
// axios.defaults.headers.post['Content-Type'] = 'application/json';
// axios.interceptors.request.use(req => {
//     let data = req.data
//     console.log('befor convert', data)
//     let params = new URLSearchParams();
//     for (let name in data) {
//            params.append(name, data[name])
//     }
//     req.data = params.toString()
//     console.log('after convert', req)
//     return req
// }, error => {
//     return Promise.reject(error)
// })
不要用JSON.stringify引入一个qs库,使用qs.stringify

Axios.post('http://localhost:9090/teacher/save',qs.stringify(this.teacher),
    {
headers: {
  'Content-Type': 'application/x-www-form-urlencoded'
}
)
.then(res=>{
    console.log('res=',res)
}).catch(err=>{

})

`
如果服端是试图接受一个JSON字符串用下面的方式

let postdata = {
    params: {
        teacher: json.stringify(this.teacher) //键值名,根据你后台POST接收名来确定
    }
}

Axios.post('http://localhost:9090/teacher/save',qs.stringify(postdata ),
        {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
    )
    .then(res=>{
        console.log('res=',res)
    }).catch(err=>{
    
    })

`

试试Axios.post('http://localhost:9090/teacher/save',{},JSON.stringify(this.teacher))

如果确定是'application/json'要传json字符串的话,不需要JSON.stringify直接传对象就行了,axios默认就是传这个,不需要你处理。


你其他地方没做默认设置?比如axios.defaults之类的?
你说默认就是'Content-Type': 'application/x-www-form-urlencoded',我咋感觉是改过默认配置呢?
然后传的时候没做处理的参数明显是做了序列化处理的。。。

感觉axios期望的数据应该是个object吧,他的解析方式是key:value,所以你传入的字符串会解析成

0: {
1: a
2: b
3:c
4: ...
n: }

应该内部调用了一个对象转query的方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进