Development Tip

플라스크에서 ajax에서 게시 된 데이터를 어떻게 사용할 수 있습니까?

yourdevel 2020. 12. 12. 12:32
반응형

플라스크에서 ajax에서 게시 된 데이터를 어떻게 사용할 수 있습니까?


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 요청이 작성되었지만 데이터가 제출되지 않았습니다. 나는 console.log(data)ajax를 사용하여 datajquery의 변수에 의미있는 데이터가 실제로 있음을 알 수 있습니다 . 그러나 ajax보기의 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


As per your example you are not sending a key value pair but rather assigning a JSON string to the jQuery data option. As mentioned in the comments you have to stringify your JSON, create an object with a key (which will be used to access the JSON string from flask) and then assign it to the jQuery data key.

    $.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']
     )

Have you tried remove contentType? You suppose to post data to Flask.

could you try add fake data like

data:{"hello":"world"} inside ajax? just to check if the hello world arrive to request.form


On the flask side, use:

data = request.get_json()

The variable data now has the dictionary you sent using ajax and you can now manipulate it with python

참고URL : https://stackoverflow.com/questions/14908864/how-can-i-use-data-posted-from-ajax-in-flask

반응형