Flask request.get_ json (force = True) при использовании JavaScript вызывает только BadRequest? - PullRequest
0 голосов
/ 08 апреля 2020

Я смотрел на эти ссылки переполнения стека Flask request.get_ json () повышение BadRequest , Получить необработанное тело POST в Python Flask независимо от типа содержимого заголовок и Как получить POSTed JSON in Flask? ; однако они не отвечают на мою проблему. Когда я использую Postman, Python или curl, мой код flask работает; однако, когда я использую JavaScript, это не работает, и я получаю ошибку BadRequest. April печатает сначала; однако ошибка появляется на веб-странице. Когда я пытаюсь запустить json.loads(request.data, strict=False), я получаю эту ошибку jinja2: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0). Я думаю, что это может быть Javascript код, который я использую. Возможно ли, что одновременный запуск запроса и отправка формы могут быть проблемой?

rout.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'])

отпечатков нет

1 Ответ

0 голосов
/ 08 апреля 2020

Я закончил тем, что добавил к существующей форме:

$("#form").submit( function(eventObj) {
                $("<input />").attr("type", "hidden")
                .attr("name", "month")
                .attr("value", "April")
                .appendTo("#form");
            return true;
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...