我无法从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对象,例如
{
    'foo' : 'foo',
    'bar' : 'bar',
    'fo_' : 42,
}

我想在 flask 中做的是:
@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 View 中的request.form为空。我的数据在哪里提交?

最佳答案

尝试

 $.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

10-08 06:33
查看更多