Как я могу использовать данные, отправленные из ajax в колбе?
У меня возникли проблемы с получением данных POSTed из 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, поэтому я вижу, что у меня действительно есть значимые данные в переменной data
в jquery. но request.form в ajax-представлении пуст. Где представлены мои данные?
Ответы
Ответ 1
Попробуйте
$.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
Ответ 2
В соответствии с вашим примером вы не отправляете пару значений ключа, а назначаете строку JSON параметру jQuery. Как уже упоминалось в комментариях, вы должны подкрепить свой JSON, создать объект с ключом (который будет использоваться для доступа к строке 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']
)
Ответ 3
Вы пытались удалить contentType? Предположим, что вы отправляете данные в Flask.
Вы можете попробовать добавить поддельные данные, например
data: { "hello": "world" } внутри ajax? просто чтобы проверить, пришел ли мир привет, чтобы request.form