цикл jquery через json работает не так, как ожидалось

#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. это именно то, что мне было нужно, спасибо. Я думаю, если бы мои ошибки были только списком ключей и значений, мой код сработал бы, верно? Спасибо!