成功解决: django获取 ajax POST 数据失败

桃扇骨 2023-03-01 11:53 185阅读 0赞

问题

  • 在使用ajax POST 向后台发送数据的时候,后台接收不到,初始代码如下:

    // 前端:

    1. $.ajax({
    2. ...
    3. data: { name: { k1: v1, k2: v2}, xx: [1, [1, 2]]}
    4. })

    Django后台:

    1. request.POST
    2. request.POST.get('name')
    3. request.POST.get('xx')

解决方法

  • ajax POST 发送简单的数据后台是可以接收到的,比如下面简单的字典和列表后台就能接收到。

    // 前端:

    1. $.ajax({
    2. ...
    3. data: { name: 1, age: 2, xx=[1, 2, 3]}
    4. })
    5. $.post(url, data, callback)

    Django后台:

    1. request.POST
    2. request.POST.get('name')
    3. request.POST.get('age')
    4. request.POST.getlist('xx')
  • 但是,如果数据比较复杂,比如字典中套着字典、列表等,ajax POST发送到后台是请求不到的,这时候需要将数据转化为 json 字符串再发送到后端。在后台先通过 request.body获取前端发来的数据,再进行utf-8接码,最后通过 json.loads() 将json 字符串转化为字典即可。如下:

    前端:

    1. $.post(url, JSON.stringfy({ name: { k1: v1, k2: v2}, xx: [1, [1, 2]]}), function (data) { });

    Django后台:

    1. request.body
    2. info = json.loads(request.body.decode('utf-8'))
    3. info['name']
    4. info['xx']

$.post() 等同于 $.ajax({type: ‘POST’})

发表评论

表情:
评论列表 (有 0 条评论,185人围观)

还没有评论,来说两句吧...

相关阅读