我无法从jquery ajax发布数据。
$('#clickme').click( function() {
var data = save_input(); // data
data['_sid'] = $survey_id; // survey_id injected from flask
data['_uip'] = $user_ip; // user_ip injected from flask, request.remote_addr
$.ajax({
type : "POST",
url : "{{ url_for('mod.load_ajax') }}",
data: JSON.stringify(data),
contentType: 'application/json;charset=UTF-8',
success: function(result) {
console.log(result);
}
});
console.log(data);
});
来自代码,data
是一个像
{
'foo' : 'foo',
'bar' : 'bar',
'fo_' : 42,
}
我在烧瓶中尝试做的是:
@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
# load _sid and _uip from posted JSON and save other data
# but request.form is empty.
# >>> request.form
# ImmutableMultiDict([])
return str(request.form)
请参阅ajax请求,但没有提交数据。我用ajax做console.log(data)
所以我可以看到我在jquery的data
变量中确实有一些有意义的数据。但是ajax视图中的request.form是空的。我的数据在哪里提交?
答案 0 :(得分:64)
尝试
$.ajax({
type : "POST",
url : "{{ url_for('mod.load_ajax') }}",
data: JSON.stringify(data, null, '\t'),
contentType: 'application/json;charset=UTF-8',
success: function(result) {
console.log(result);
}
});
然后从服务器,您可以像这样引用数据中的变量:
request.json['foo']
由于内容类型指定为application/json
,因此数据位于request.json
答案 1 :(得分:13)
根据您的示例,您不是发送键值对,而是将JSON字符串分配给jQuery数据选项。如评论中所述,您必须对JSON进行字符串化,使用键创建一个对象(将用于访问来自flask的JSON字符串),然后将其分配给jQuery数据键。
$.ajax({
type : "POST",
url : "{{ url_for('mod.load_ajax') }}",
data: {json_str: JSON.stringify(data)},
contentType: 'application/json;charset=UTF-8',
success: function(result) {
console.log(result);
}
});
@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
# load _sid and _uip from posted JSON and save other data
# but request.form is empty.
# >>> request.form
# ImmutableMultiDict([])
return str(request.form['json_str']
)
答案 2 :(得分:1)
您是否尝试过删除contentType?您可以将数据发布到Flask。
你可以尝试添加假数据,如
数据:ajax中的{“hello”:“world”}?只是为了检查你好世界是否到达request.form
答案 3 :(得分:0)
在烧瓶侧面,使用:
UIImage
变量数据现在具有您使用ajax发送的字典,您现在可以使用python对其进行操作
答案 4 :(得分:0)
从 Ajax (Flask) 获取数据
HTML:
<input type="text" id="inputbox" autocomplete="off">
JS:
$(document).ready(function(){
$("#inputbox").on("input",function(e){
inputbox = $("#inputbox").val();
console.log(inputbox)
$.ajax({
method: "post",
url: "/path",
data: {inputbox},
success:function(res){
}
})
});
});
.py:
search_value = request.form.get("text")