首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask request.get_json(force=True)在使用JavaScript时仅引发BadRequest?

Flask request.get_json(force=True)在使用JavaScript时仅引发BadRequest?
EN

Stack Overflow用户
提问于 2020-04-08 08:40:43
回答 2查看 777关注 0票数 0

我看过这些堆栈溢出链接Flask request.get_json() raise BadRequestGet raw POST body in Python Flask regardless of Content-Type headerHow to get 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代码。是否可能同时运行请求和表单提交可能是问题所在?

routes.py

代码语言:javascript
复制
@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

代码语言:javascript
复制
<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);
}

EDIT#

代码语言:javascript
复制
content = request.get_json(silent=True)
    print(content['month'])

打印无

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-08 13:09:32

我最终添加了一个现有的表单:

代码语言:javascript
复制
$("#form").submit( function(eventObj) {
                $("<input />").attr("type", "hidden")
                .attr("name", "month")
                .attr("value", "April")
                .appendTo("#form");
            return true;
            });
票数 0
EN

Stack Overflow用户

发布于 2020-12-04 13:46:50

代码语言:javascript
复制
$(document).on('click','#texthide',function(){
        
    
        var text = $("#textVal").val();
        var font = $("#font_text").val();
        var color = $("#color_text").val();
        var start_text = $("#start_text").val();
        var end_text = $("#end_text").val();
        var vid_id = new_d
        console.log(text);
        $('body').addClass('addLoader');
        $.ajax({
            url: '/videos/test_text',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            datatype: "json",
            // data: $('#formtext').serialize(),
            data: JSON.stringify(
                
            {   text: $("#textVal").val(),
                font: $("#font_text").val(),
                color:  $("#color_text").val(),
                start_text: $("#start_text").val(),
                end_text: $("#end_text").val(),
                video_id: new_d
            })
          
            
            // onComplete:function(data){
            //     $('body').removeClass('addLoader');
            // }
        });
    });
    
    
    @videos.route("/test_text", methods = ['POST'])
    
    def test_text():
       
        data = request.get_json("")
        print(data)
    
        return "success!"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61091603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档