我正在尝试通过json将数据从ajax传递到flask中的路由。有时我会弹出一个包含实际数据的对话框,但我无法解析数据或将其显示在网页本身上。(我最终需要让此数据操作sql db,但现在我只是试图能够处理数据)。
routes.py
@app.route("/post", methods=['GET', 'POST'])
def post():
data = request.get_json()
jsonify(data=data)
x = request.json['index']
return render_template('post.html', x=x)
request.json ['index']不起作用,并引发TypeError:'NoneType'
如果我返回jsonify(data = data)而不是返回它,那么当我进入localhost:5000 / post时,我可以在对话框窗口中看到数据
index.html
<script>
$(function() {
$( "#sortable" ).sortable({
update: function(event, ui) {
var postData = $(this).sortable('serialize');
}
});
});
function postSave() {$( "li" ).each(function( index ) {
console.log( index + ": " + $( this ).attr('id') );
$.ajax({
url: '/post',
data: JSON.stringify({ "index" : index, "id" : $( this ).attr('id') } ),
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
alert(JSON.stringify(data));
}
});
var url = "/post";
$(location).attr('href',url);
});
}
</script>
post.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- simply be able to parse through the data and print it here for testing purposes -->
</body>
</html>
非常感谢所有帮助,我在讲话时拔出头发:)
答案 0 :(得分:2)
您的post
路由已配置为同时处理GET
和POST
请求,但是您无法区分GET
和POST
请求。如果您的浏览器将GET请求发送到烧瓶服务器上的发布路线,则两种请求之间没有区别。一个简单的请求条件如下:JSON
可用于区分两种类型的请求。话虽如此,也许您可以尝试以下方法:
if flask.request.method == 'POST':
如果这不起作用,请打印 @app.route('/post', methods=['GET', 'POST'])
def post():
if request.method == "POST":
req_data = request.get_json()
x = req_data['index']
return render_template('post.html', x=x)
else: # GET request
# handle as you see fit probably want to render a page
# with inputs for a user to fill out
return render_template(<page_you_wish_to_render>)
吗?这样我们就可以看到请求的外观,因为它可能是无效的req_data
。
此外,您的JSON
调用看起来有点不正常,也许您可以仅将Ajax部分编辑为如下内容:
ajax
最后,在发送ajax请求之前,我会先声明$.ajax({
type : 'POST',
url : "{{url_for('post')}}",
contentType: 'application/json;charset=UTF-8',
data : {'index':index}
});
,以确保该请求正确。
希望有帮助!