我无法从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是一个javascript对象,例如
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请求,但未提交任何数据。我console.log(data)使用ajax,因此可以看到datajquery 中的变量中确实有一些有意义的数据。但是ajax视图中的request.form为空。我的数据在哪里提交?
console.log(data)
尝试
$.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
application/json
request.json