axios 使用data方式传递参数,后端接受不到

发布于 2022-09-06 03:04:30 字数 511 浏览 8 评论 0

在axios文档中:

// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

这样后端就没法接收了
clipboard.png

如果把data换成params,

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

野生奥特曼 2022-09-13 03:04:30

查阅了资料https://segmentfault.com/p/12...,发现需要后端改接收方式

服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。

唔猫 2022-09-13 03:04:30

在axios的请求钩子函数里,拼接json字符串的格式丢给后端

水染的天色ゝ 2022-09-13 03:04:30

import qs from 'qs'
data = qs.stringify(data)

可以放到transformRequest 里去处理,这样就不会影响,你别的代码了

const service = axios.create({
  baseURL: baseUrl,
  transformRequest: [function (data) {
    // data['src'] = 'dev'
    if (data instanceof FormData) {
      return data
    }
    data = qs.stringify(data)
    return data
  }]
})
深巷少女 2022-09-13 03:04:30
import axios from 'axios';
let baseUrl = ''
export const htp = axios.create({
    baseURL: baseUrl,
    timeout: 10000,
    headers: {"Content-Type": "application/x-www-form-urlencoded"},//设置头
    withCredentials: true//带cookie
});

//拦截处理请求
htp.interceptors.request.use(req => {

    return handleRequest(req)
}, error => {

    return Promise.reject(error)
})
handleRequest = req => {

    let data = req.data
    console.log('befor convert', data)
    let params = new URLSearchParams();//数据编码
    for (let name in data) {
        if (data[name] instanceof Date) {
            params.append(name, data[name].format("yyyy-MM-dd hh:mm:ss")) //日期对象转换
        } else if (data[name] instanceof Object) { //嵌套对象转换,
            for (let name2 in data[name]) {
                if ('size' == name2) {
                    params.append('pageSize', data[name][name2])
                } else if ('current' == name2) {
                    params.append('pageNo', data[name][name2])
                } else if ('search' == name) {
                    params.append(`${name2}`, data[name][name2])
                } else {
                    params.append(`${name}.${name2}`, data[name][name2])
                }

            }
        } else {
            params.append(name, data[name])//普通属性
        }
    }


    req.data = params.toString()
    console.log('after convert', req)
    return req
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文