Bonjour,

Je rencontre un problème lors d'une action sur un element de ma page. Je suis pas très bon en js et j'aissaie de faire un peu comme en php, c'est à dire chainer les fonctions (pour une meilleur organisation) mais peut être que je m'y prend mal, du coup le résultat final c'est que je me retrouve avec ma variable = maFunction() = undefined alors que dans maFunction() j'ai bien une valeur...

Voici mon code

function setValue(id, object, type, data_name, reload, param_reload, methode){
    var value,
        UrlStr,
        Url = document.location.href,
        UrlParams = Url.indexOf('#'),
        validate = false
    ;
    if(UrlParams !== -1){
        UrlStr = Url.substr(0, UrlParams);
    }else{
        UrlStr = Url;
    }
    if(type === 'check'){
        console.log(object);
        if(object.checked === true){
            value = 1;
        }else{
            value = 0;
        }
    }else if(type === 'date'){
        var dateFR = object.value;
        var tabFR = dateFR.split('/');
        tabFR.reverse();
        var dateEN = tabFR.join('/');
        value = dateEN;
        object.value = dateFR;
    }else{
        value = object.value;
    }
    if(methode !== ''){
        validate = validated(data_name, id, value);
        console.log(validate);// Voici ma ligne undefined
    }else{
        validate = true;
    }
}

function validated()

function validated(data_name, item_id, value){
    if(data_name === 'date_envoie'){
        $.ajax({
            url : '/mon_url',
            type : 'POST',
            data : 'id=' + item_id + '&data=' + value,
            dataType: 'json',
            success: function(json) {
                var error_date_envoie = document.getElementById('error_date_envoie'),
                    text_error_date_envoie = 'La date d\'envoie doit être antérieur à la date d\'accord';
                ;
                //console.log(json);
                if(json === 'false'){
                    error_date_envoie.innerText = text_error_date_envoie_conv_syndic;
                    if(error_date_envoie.classList.contains('display_none') === true){
                        error_date_envoie.classList.remove('display_none');
                    }
                    return 'false';
                }else{
                    error_date_envoie.innerText = '';
                    if(error_date_envoie.classList.contains('display_none') === false){
                        error_date_envoie.classList.add('display_none');
                    }
                    return 'true';
                }
            },
            error: function(json){
                console.log(json);
                return 'false';
            }
        });
    }else{
        return data_name;
    }
}

là j'ai bien des return dans tout les cas donc je ne comprend pas ! json me retourne bien 'true' ou 'false', donc les class appliquées à mon element fonctionne bien, mais je n'arrive pas à récupérer la valeur 'true' ou 'false' dans ma function setValue()

4 réponses


Lartak
Réponse acceptée

Bonjour.
C'est tout à fait normal, étant donné que ta fonction validated fait une requête ajax, au moment ou ta variable validate est définie la requête n'est pas encore terminée, par conséquent tu n'as pas encore de retour, du coup ta variable ne peut être que undefined.

cid5420
Auteur

Bonjour Lartak,

Oui effectivement j'ai trouvé l'erreur mais j'essaie de trouver une solution. Je me tourne vers les promesses (je connais pas encore)...

cid5420
Auteur

merci je suis en train de regarder, ça devrait le faire !!!