ajax之post请求application/x-www-form-urlencoded传参的解决方案

发布时间 2023-06-14 17:06:50作者: 豫华商

一般按照正常的逻辑,我们在传递application/x-www-form-urlencoded时,参数应该这样写,但实际操作中发现一直获取不到参数。

ajax
  .create({
    baseURL: 'url',
    timeout: 10000,
    headers: { 'Content-Type': 'application/json' },
  })
  .post(
    'xxx/xxx/xxx',
    JSON.stringify({
      name: '',
      age: 12,
    }),
    {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
      },
    }
  )
  .then(function(response) {
    console.log(JSON.stringify(response))
  })
  .catch(function(error) {
    console.log(error)
  })

按照上面所示的方法,在后端使用Python的Django项目获取参数

# 1. 获取前端传来的base64
            base64_str = request.POST.get('base64', '')

发现始终无法获取到参数,故推测是数据传输格式的问题。

方法一:[axios]添加两句代码,就可以正常获取

var qs = require('qs');

然后把JSON.strinify改为qs.stringify就可以了,qs.stringify将数据对象序列化成URL的形式,以&进行拼接。这样 request.POST.get(name) 才能取到值

方法二:[ajax]去掉JSON.stringify()处理,按照原始值处理即可。

参考:

https://www.cnblogs.com/bruce-gou/p/10251004.html
https://blog.csdn.net/yangwqi/article/details/115111906