thkang thkang - 2 months ago 9
Ajax Question

how can I use data posted from ajax in flask?

I'm having trouble getting data POSTed from 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);
});


from the code,
data
is a javascript object like

{
'foo' : 'foo',
'bar' : 'bar',
'fo_' : 42,
}


what I'm trying to do in flask is :

@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)


see, the ajax request is made but no data is submitted. I do
console.log(data)
with ajax so I can see that I really have some meaningful data in
data
variable in jquery. but request.form in ajax view is empty. Where is my data submitted?

Answer

Try

 $.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);
    }
});

Then from the server, you can refer to the variables in data like this :

request.json['foo']

Since the content type is specified as application/json the data is in request.json