首页 > 解决方案 > 烧瓶 request.get_json() 没有收到来自 $.post() 请求的任何内容

问题描述

我正在尝试在 JavaScript 和 Python 之间传递数据,并且我正在通过使用 JSON 变量来做到这一点,但似乎每当我POST从 JavaScript 发出请求时,request.get_json()Python 接收器方法中的任何内容都不会None在我 print 时进行打印request.get_json()

Python 方法可以在将某些内容返回给 JS 的情况下工作,但它始终是None. $.post()我的方法做错了吗?

JavaScript$.post()调用:

var items = {"robotCoor": {"robot_x": 1, "robot_y": 1},
         "gridParams": {"goal_y": 0, "size_x": 16, "size_y": 16, "goal_x": 0},
         "obsParams": {"obs_x3": 0, "obs_x4": 0, "obs_y4": 0, "obs_x2": 0, "obs_x1": 0, "obs_y1": 0, "obs_y2": 0, "obs_y3": 0},
         "aiParams": {"layers": 0, "learning_rate": 0, "speed": 0}
     };
var stuff = JSON.stringify(items);
console.log(stuff); #prints the correct thing
$.post("receiver", stuff, function( data ) {
    console.log(stuff); #prints the correct thing
    alert("Data: " + data); #alerts with "Data: None"
});

Python接收器方法:

@app.route("/receiver", methods = ["POST"])
def receiver():
    if request.method == "POST":
        stuff = request.get_json()
        print(stuff) #prints None
        stuff = str(stuff)
        print(stuff) #prints None

        return stuff

标签: javascriptpythonjsonpostflask

解决方案


在您的 JavaScript 中,将请求的 Content-Type 设置为application/json. 否则get_json将永远返回None。一种方法是执行以下操作[1]

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

或者,您可以尝试使用get_json(force=True)[2]强制 Flask 忽略内容类型


推荐阅读