#json #ajax #loops #flask #flask-wtforms
#json #ajax #циклы #flask #flask-wtforms
Вопрос:
У меня есть очень простой фрагмент ajax, который сериализует форму flask (wtforms) и отправляет ее в конечную точку. конечная точка проверяет форму (проверка wtforms). на данный момент все, что мне нужно, это правильное сообщение, если форма проверяется, и список ошибок, если это не так. это мой код:
@bp_catalogue.route('/catalogue/add_dataset', methods = ['POST'])
@login_required
def add_dataset():
form = add_dataset_form()
if form.validate_on_submit():
return jsonify(success = 'ok!')
return jsonify(error = form.errors)
Этот код работает так, как ожидалось, и если все в порядке, строка ‘ok!’ доступна мне в jquery с помощью response.success, которая будет использоваться по моему желанию. если форма не проходит проверку, я ожидаю, что она отправит ошибки обратно в аналогичном формате, и это происходит. вот как выглядит ответ:
response.error содержит несколько ошибок, таких как простое сообщение о том, что для пустых входных данных требуется значение. Я хочу перебирать эти значения и передавать их в контейнер под каждой формой в моем html. это мой код:
$('form').on('submit', function(event) {
$.ajax({
data : $('form').serialize(),
type : 'POST',
url : '/catalogue/add_dataset'
}).done(function(response) {
if (response.hasOwnProperty('success')) {
$('form')[0].reset();
$('.response').empty().html(response.success);
}
$(response.error).each(function(key, value) {
console.log(value);
});
});
event.preventDefault();
});
проблема в том, что мой код для перебора ошибок возвращает не то, что я ожидаю. глядя на изображение, response.error — это объект с 2 элементами: dataset_name и dataset_description. поскольку я перебираю их, я ожидаю, что консоль зарегистрирует фактическое сообщение об ошибке для каждой из ошибок, но это не так.
что я делаю не так?
Ответ №1:
Ваш dataset_description
и dataset_name
имеет значение, arrays
поэтому вам нужно выполнить итерацию по этому массиву, чтобы получить требуемые значения.
Демонстрационный код :
var response = {
"error": {
"dataset_description": ["something1", "something12"],
"dataset_name": ["something02", "something13"]
}
}
//loop through error
$.each(response.error, function(key, value) {
console.log(key " : ") //key
//loop through value
$.each(value, function(index, values) {
console.log(values); //print value at that key
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Комментарии:
1. это именно то, что мне было нужно, спасибо. Я думаю, если бы мои ошибки были только списком ключей и значений, мой код сработал бы, верно? Спасибо!