首页 > 解决方案 > 使用 JavaScript 时烧瓶 request.get_json(force=True) 只会引发 BadRequest?

问题描述

我已经查看了这些 Stack Overflow 链接Flask request.get_json() raise BadRequestGet raw POST body in Python Flask 不管 Content-Type header,以及How to get POSTed JSON in Flask? ; 但是,他们没有回答我的问题。当我使用 Postman、Python 或 curl 时,我的烧瓶代码可以工作;但是,当我使用 JavaScript 时,它不起作用并且我收到 BadRequest 错误。April首先打印;但是,该错误会在网页上弹出。当我尝试运行时,json.loads(request.data, strict=False)我得到了这个 jinja2 错误:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0). 我认为这可能是我正在使用的 Javascript 代码。是否有可能同时运行请求和表单提交可能是问题?

路线.py

@app.route('/calendar/', methods=['GET', 'POST'])
def calendar():
if request.method == 'POST':
    data = request.get_json(force=True)
    print(data['month'])
if form.validate_on_submit():
    pass    

html

<form action="" onsubmit="myFunction()" method="POST">
</form>

function myFunction() {
    var data = "{\"month\":\"April\"}";

    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;

    xhr.addEventListener("readystatechange", function() {
          if(this.readyState === 4) {
           console.log(this.responseText);
          }
    });
    xhr.open("POST", window.location.href);
    xhr.setRequestHeader("Content-Type", "application/javascript");
    xhr.setRequestHeader("Cookie", "session=eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiNmM5MmIxNmFkYWIyMWZmZjk3MWE4MmJkZTViNTc1M2ZmMDNiY2MxNyJ9.Xo0X5Q.bzl4ihYLaHjUqmiIc6WCwFUOP_8");

    xhr.send(data);
}
编辑#####
content = request.get_json(silent=True)
    print(content['month'])

打印无

标签: javascriptpythonflask

解决方案


我最终添加到现有表单:

$("#form").submit( function(eventObj) {
                $("<input />").attr("type", "hidden")
                .attr("name", "month")
                .attr("value", "April")
                .appendTo("#form");
            return true;
            });

推荐阅读