11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour, ça fait un petit moment que je travaille sur ça et je suis vraiment bloqué, je n'arrive pas à comprendre comment récupérer une variable, je vous montre tout ça :


var variable = 0; // je créer une variable que je veux utiliser tout au long de la fonction en la mettant à jour
        console.info(variable + 'debut');
        
        verifier('#username'); // fait appel à la fonction verifier(id)
        verifier('#password');
        
        // et ici, je veux retrouver la variable qui a traversé la fonction verifier
        if( variable == 0){
            // Le membre est connecté
 
            $("#resultat").html("<p>Vous avez été connecté avec succès !</p>");

        } else {
                     // Le membre n'a pas été connecté
            $("#resultat").html("<p>Erreur lors de la connexion...</p>");
        }


et la fonction verifier(id) :

function verifier(id){

        // ici je récupère les données dans le formulaire
        $(id).keyup(function () {

            // je les envoie au serveur qui va les comparer
            $.post(
                'connexion.php',
                {
                    username : $(this).val()
                },

                function(data){ //une fois revenu, si les données sont bonnes, variable = 0 sinon variable = 1

                    console.info(variable + 'test');

                    if(data == 0){
                        // Le mot de passe est bon
                        console.info(data + 'données de la fonction');
                        console.info(variable + 'total');
                        return variable;
                    } else {
                                 // Le mot de passe est faux
                        console.info(data + 'données de la fonction');
                        variable++;
                        console.info(variable + 'total');
                        return variable;
                    }
                }
            );

        }).keyup();
    };


Je me suis beaucoup renseigné là-dessus pour le débloquer et j'ai compris que c'était à cause des variables locales et globales. J'ai vu pas mal de solutions avec des fonctions dans des fonctions qui rappelaient la variable, enfin bref pas mal de trucs que j'ai testé mais que je n'arrive pas à adapter à mon code.
Modérateur
Bonjour.

Ce code ne fonctionne pas? (il devrait)

Ou se trouve la déclaration de la fonction par rapport à la déclaration de la variable?
Le premier code semble indenté, dans quel structure se trouve-t-il?
Bonjour,
le code ne fonctionne pas, la variable utiliser pour le if reste celle du début, elle n'est pas "mise à jour" par les fonctions verifier.

et sinon, pour les autres questions, voici mon code complet :

function envoyer(){

        $('#submit').click(function (e) {
                e.preventDefault();
            });

        var variable = 0; // je créer une variable que je veux utiliser tout au long de la fonction en la mettant à jour
        console.info(variable + 'debut');

        verifier('#username'); // fait appel à la fonction verifier(id)
        verifier('#password');

        // et ici, je veux retrouver la variable qui a traversé la fonction verifier
        if( variable == 0){
            // Le membre est connecté
 
            $("#resultat").html("<p>Vous avez été connecté avec succès !</p>");

        } else {
                     // Le membre n'a pas été connecté
            $("#resultat").html("<p>Erreur lors de la connexion...</p>");
        }
    };

    function verifier(id){

        // ici je récupère les données dans le formulaire
        $(id).keyup(function () {

            // je les envoie au serveur qui va les comparer
            $.post(
                'connexion.php',
                {
                    username : $(this).val()
                },

                function(data){ //une fois revenu, si les données sont bonnes, variable = 0 sinon variable = 1

                    console.info(variable + 'test');

                    if(data == 0){
                        // Le mot de passe est bon
                        console.info(data + 'données de la fonction');
                        console.info(variable + 'total');
                        return variable;

                    } else {
                                 // Le mot de passe est faux
                        console.info(data + 'données de la fonction');
                        variable++;
                        console.info(variable + 'total');
                        return variable;
                    }
                }
            );

        }).keyup();
    };


Le premier code se situe dans une autre fonction et le second se situe en dehors de cette fonction
Modérateur
Bonjour,

Je pense qu'il te faille assigner l'appel à ta fonction à une variable afin que celle-ci puisse contenir le retour de ta fonction.

Si tu fais
var machin = verifier('#username');

machin devrait contenir variable à jour (si JS réagit comme Php car JS n'est pas ma tasse de thé Smiley cligne )
Modérateur
Une variable définie par var est visible dans sa fonction parent uniquement, selon tes besoins, plusieurs options:


var variable = 0;
function envoyer(){ }
function verifier(){ }

variable globale, ne sera pas réinitialisée ni différenciée par plusieurs appels à envoyer()


function envoyer(){
  var variable = 0;
  var verifier = function(){
    
  };
  ...
  verifier('#username');
  verifier('#password');
}

Ici un bricolage fonctionnel

ou comme évoqué par Greg:


function envoyer(){
  var variable = 0;
  …
  variable = verifier('#password', variable);
}
function verifier(id, variable){
  …
  return variable;
}


ou encore utiliser les objets et prototypes mais laissons cela de coté pour le moment Smiley smile
alors j'avais déjà essayé de faire le

var variable = verifier('#password');


mais ça me rendait un message d'erreur disant "undefined".
Sinon je viens d'essayer les autres solutions et cette fois-ci la variable est bonne mais n'est pas actualisée

var variable = 0; // je créer une variable que je veux utiliser tout au long de la fonction en la mettant à jour
        console.info(variable + 'debut');

        verifier('#username',variable);// fait appel à la fonction verifier(id)
        verifier('#password', variable);

        console.info(variable+'fin');

Et alors là, j'ai découvert dans la console que js prioritise console.info aux fonctions ? A vrai dire je comprends plus trop où la variable se perd
upload/1541076491-73085-capture134.png
Pourtant je l'ai mis :


function verifier(id, variable){

        // ici je récupère les données dans le formulaire
        $(id).keyup(function () {

            // je les envoie au serveur qui va les comparer
            $.post(
                'connexion.php',
                {
                    username : $(this).val()
                },

                function(data){ //une fois revenu, si les données sont bonnes, variable = 0 sinon variable = 1

                    console.info(variable + 'test');

                    if(data == 0){
                        // Le mot de passe est bon
                        console.info(data + 'données de la fonction');
                        console.info(variable + 'total');
                        return variable;
                    } else {
                                 // Le mot de passe est faux
                        console.info(data + 'données de la fonction');
                        variable++;
                        console.info(variable + 'total');
                        return variable;
                    }
                }
            );
        }).keyup();

        return variable;
    };


Après je sais pas si c'est une bonne idée de le mettre et dans la condition if et à la fin de la fonction
Modérateur
Au temps pour moi, le problème est l'asynchrone: L'appel ajax $.post est lancé, et ton code continue à s'éxecuter, ta fonction function(data){} ne sera appelée que lors du retour de la requête.

on pourrait passer un callback (fonction en paramètre) mais le plus simple à mon avis est de réorganiser ton code:

function envoyer(){

        $('#submit').click(function (e) {
                e.preventDefault();
            });

        $('#username, #password').keyup(function () {

            // je les envoie au serveur qui va les comparer
            $.post(
                'connexion.php',
                {
                    username : $(this).val()
                },

                function(data){ //une fois revenu, si les données sont bonnes, variable = 0 sinon variable = 1


                    if(data == 0){
                        // Le mot de passe est bon
                        console.info(data + 'données de la fonction');
                        $("#resultat").html("<p>Vous avez été connecté avec succès !</p>");
                    } else {
                                 // Le mot de passe est faux
                        console.info(data + 'données de la fonction');
                        $("#resultat").html("<p>Erreur lors de la connexion...</p>");
                    }
                }
            );

        }).keyup();
       
    };



Par contre je suis dubitatif sur ça :


{
   username : $(this).val()
 }

vu que tu envoies username: 'valeur_du_champ_utilisateur' soit username: 'valeur_du_champ_password' selon le champ dans lequel tu es en train de taper?
Modifié par kustolovic (01 Nov 2018 - 15:45)
Meilleure solution
d'accord merci beaucoup, et en ce qui concerne la valeur envoyée en $post, et bien ça marchait puisque la fonction verifier reprenait l'id qu'on voulait et ce qui était écrit dans le champ.
Et justement, je pense que je vais me renseigner la fonction callback puisque je cherche à créer une fonction automatisée que je pourrais réutiliser sur plusieurs pages, pour avoir à appeler avec juste une ligne ce que je veux au lieu de copier coller tout ce paragraphe.
Bon c'est tout aussi efficace mais l'esthétique dans le code compte beaucoup pour moi mdrr
kustolovic a écrit :
si tu as Cartons déménagement pas cher undefined c'est que tu as oublié le return à la fin de verifier().

Bonjour !
Je viens de m’inscrire et en surfant sur ce site j’ai trouvé qu’il a beaucoup de potentiel et que les sujets sont tous passionnant.
Merci !