J'ai un extrait ajax très simple qui sérialise un formulaire de flacon (wtforms) et l'envoie à un point de terminaison. le point de terminaison valide le formulaire (validation wtforms). pour l'instant, tout ce dont j'ai besoin est un message valide si le formulaire est valide et une liste d'erreurs si ce n'est pas le cas. c'est mon code :

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

Ce code fonctionne comme prévu et si tout va bien, le 'ok!' string est disponible pour moi dans jquery en utilisant response.success à utiliser comme je le souhaite. si le formulaire ne se valide pas, je m'attends à ce qu'il renvoie les erreurs dans un format similaire, et il le fait. voici à quoi ressemble une réponse :

enter image description here

Response.error contient plusieurs erreurs, comme un simple message indiquant que les entrées vides nécessitent une valeur. Je cherche à parcourir ces valeurs et à les transmettre à un conteneur sous chaque formulaire de mon html. c'est mon code :

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

Le problème est que mon code pour parcourir les erreurs ne renvoie pas ce à quoi je m'attends. en regardant l'image, response.error est l'objet, avec 2 éléments : dataset_name et dataset_description. pendant que je les parcoure, je m'attends à ce que la console enregistre le message d'erreur réel pour chacune des erreurs et ce n'est pas le cas.

Qu'est-ce que je fais mal?

1
Chris 18 oct. 2020 à 22:24

1 réponse

Meilleure réponse

Vos dataset_description et dataset_name ont pour valeur arrays, vous devez donc parcourir ce tableau pour obtenir les valeurs requises .

Code de démonstration :

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>
0
Swati 19 oct. 2020 à 04:32