我看过这些堆栈溢出链接Flask request.get_json() raise BadRequest、Get raw POST body in Python Flask regardless of Content-Type header和How 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
@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);
}EDIT#
content = request.get_json(silent=True)
print(content['month'])打印无
发布于 2020-04-08 13:09:32
我最终添加了一个现有的表单:
$("#form").submit( function(eventObj) {
$("<input />").attr("type", "hidden")
.attr("name", "month")
.attr("value", "April")
.appendTo("#form");
return true;
});发布于 2020-12-04 13:46:50
$(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!"https://stackoverflow.com/questions/61091603
复制相似问题