I\'m having trouble getting data POSTed from jquery ajax.
$(\'#clickme\').click( function() {
var data = save_input(); // data
data[\'_sid\'] = $sur
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']
)
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
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
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