我正在学习如何使用ajax和Flask,所以我做的是发送一个ajax请求,并在我的python文件中以post
请求接收数据
My html file contains this code
var data = {"name":"John Doe","age":"21"};
$.ajax({
url:'/post/data',
datatype : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),
success : function(result) {
jQuery("#clash").html(result);
},error : function(result){
console.log(result);
}
});
我的python文件包含:
@app.route('/post/data',methods=['GET','POST'])
def postdata():
#do some
data = str(request.args)
json_dumps = json.dumps(data)
return json_dumps
这为我提供了页面上的以下数据
"ImmutableMultiDict([('{\"name\":\"John Doe\",\"age\":\"21\"}', u'')])"
这就是我的request.query_string
看起来{%22name%22:%22John%20Doe%22,%22age%22:%2221%22}
那么如何获得name
和age
。如果我在任何地方都错了,请纠正我。谢谢。
答案 0 :(得分:17)
您实际上并不需要从ImmutableMultiDict
获取数据。你所拥有的一些错误阻止你将响应作为json数据拉出来。首先,您必须稍微调整ajax调用的参数。您应该将呼叫类型添加为POST
。此外,datatype
应拼写为dataType
。你的新电话应该是:
var data = {"name":"John Doe","age":"21"};
$.ajax({
type: 'POST',
contentType: 'application/json',
url: '/post/data',
dataType : 'json',
data : JSON.stringify(data),
success : function(result) {
jQuery("#clash").html(result);
},error : function(result){
console.log(result);
}
});
现在,数据实际上是作为json
类型的发布请求发送的。在Flask服务器上,我们现在可以将数据作为子信息读取如下:
@app.route('/post/data',methods=['GET','POST'])
def postdata():
jsonData = request.get_json()
print jsonData['name']
print jsonData['age']
return "hello world" #or whatever you want to return
这将成功打印John Doe
和21
。
如果这对你有用或者你有任何其他问题,请告诉我!
编辑:您可以将成功返回到来自flask的ajax调用,如下所示:
# include this import at the tomb
from flask import jsonify
@app.route('/post/data',methods=['GET','POST'])
def postdata():
...
return jsonify(success=True, data=jsonData)
答案 1 :(得分:5)
我来到这个页面是因为我试图用AJAX发送表单,我终于找到了解决方案。解决方案是跳过JSON(希望这会帮助其他人进行相同的搜索):
$.ajax({
type: "POST",
url: my_url,
data: $("#formID").serialize(), //form containing name and age
success: function(result){
console.log(result);
}
});
然后,在Flask服务器上:
app.route('/my_url', methods = [POST])
def some_function():
name = request.form['name']
age = request.form['age']
# do what you want with these variables
return 'You got it right'
答案 2 :(得分:2)
只需在request.form对象上调用to_dict,例如http://www.seanbehan.com/how-to-get-a-dict-from-flask-request-form/
答案 3 :(得分:0)
我通过像这样将contentType添加为application / JSON来解决了问题
data ={
type:'POST',
contentType:'application/json',
otherData: 'foo'
}
您现在可以像这样访问烧瓶后端中的数据:
app.route('/my_url', methods = [POST])
def some_function():
other_data = request.form['otherData']
# do something
注意:我为此使用了JavaScript而不是jQuery