如何使用从ajax发布的数据?

时间:2013-02-16 09:32:47

标签: jquery python ajax flask

我无法从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,
}

我在烧瓶中尝试做的是:

@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是空的。我的数据在哪里提交?

5 个答案:

答案 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")