IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comparaison de variables


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 728
    Points : 632
    Points
    632
    Par défaut Comparaison de variables
    Bonjour,

    je suis assez nouveau en AJAX et Javascript et j'ai un truc qui me prend la tête

    J'essaie de passer des valeurs d'une fonction a une autre et de faire des conditions sur cette fonction.

    Par exemple :
    => un requete AJAX me renvoie une valeur vide ou pas.

    Si c'est vide , rien ne doit se passer , si ce n'est pas vide , j'affiche un message d'alerte et je quitte la fonction.

    code AJAX
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($todo=="doublon"){
    	$numAT = $_GET['numAT'];
    	$plan = new planification(); 
    	$doublon = array(); 
    	$doublon = $plan->DoublonPlanification($numAT); 
            // -- la fonction ci-dessus envoie le résulat qu'en cas de doublon --
    	if($doublon!=""){
    		echo json_encode($doublon); 
    	}
    }

    Dans la fonction qui appelle le script php en AJAX , je mets le résulat dans champ "hidden".
    (j'ai essyé avec des globales et des "return glob" sans plus de succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    if(req.readyState == 4)
    {
    	if(req.status == 200)
    	{
                    glob = document.getElementById("glob_variable");
    		glob.value  = req.responseText ;
            }
    }
    ...
    Dans le alert(glob) ci-dessous, j'ai bien la bonne valeur ( vide ou le JSON) , mais c'est toujours l'alerte "Déjà programmée" qui s'affiche. Comme si le "if(glob!=""){" ne fonctionne pas malgré que la variable glob contienne le texte. J'ai essayé de faire des essais avec des booléens et autre , mais je me tors les neurones sans y arriver ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glob = document.getElementById("glob_variable").value;
    alert(glob); 
    if(glob!=""){
    	alert("Déjà programmée !"); 
    	return false;
    }else{
    	return true ; 
    }
    Si quelqu'un avait un petite idée ...

    Excellent dimanche a tous

    Olivier

  2. #2
    Membre régulier Avatar de royto
    Homme Profil pro
    Développeur .Net & Web
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .Net & Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Points : 96
    Points
    96
    Par défaut
    es tu sur que ton code est bien interprété après la fonction qui traite le retour de ton appel Ajax ?


    ta requête Ajax est asynchrone c'est a dire qu on attend pas le retour de la requête pour passer a la suite. ainsi la valeur sera toujours vide si interprété avant.

  3. #3
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 728
    Points : 632
    Points
    632
    Par défaut
    Bonjour,

    merci pour ta réponse.

    Pour le code, il me semble que ce soit OK, du moment que je mets un :

    juste avant la vérification, soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glob = document.getElementById("glob_variable").value;
    alert(glob); 
    if(glob!="OK"){
    	alert("Déjà programmée !"); 
    	return false;
    }else{
    	return true ; 
    }
    Dans cet exemple, le alert(glob) me donne "OK" et direct derrière il me rentre dans la condition !="OK"



    Olivier

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Points : 282
    Points
    282
    Par défaut
    Bonjour Olivier,
    Effectivement tu te tords les neurones, parce que d'une manière ou d'une autre (peut-être que contrairement à ce que tu crois, php ne te renvoie pas une chaîne vide: "" mais un espace " ", ou un saut de ligne), tu dois avoir un caractère dans ta chaîne soit-disant vide. Un bon test pour le savoir aurai été:
    qui t'aurai retourné 0 en cas de chaîne effectivement vide, ou 1 (voir plus) en cas de chaîne vide seulement en apparence.
    Dans ce cas, pour que ton code marche, tu dois ajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glob = glob.replace(/^\s+/, '').replace(/\s+$/, '');
    juste avant:
    Mais ce n'est pas du tout une bonne manière de faire. En effet, il aurait été plus robuste de renvoyer par ex un 1 ou un 0 en php, un ok ou ko, un true ou false. Encore mieux, un json traité comme tel:
    ou
    Donc voici ton code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if ($todo=="doublon"){
     
    	$numAT = $_GET['numAT'];
     
    	$plan = new planification(); 
    	$doublon = array(); 
    	$doublon = $plan->DoublonPlanification($numAT); 
     
            // -- la fonction ci-dessus envoie le résulat qu'en cas de doublon --
     
    	if($doublon!=""){
    		echo json_encode(array("retour"=>1)); 
    	}else{
    		echo json_encode(array("retour"=>0)); 
    	}
     
    }
    ton code ajax js:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var glob=true; //variable réellement globale
    if(req.readyState == 4)
    		{
    			if(req.status == 200)
    			{
                                var data= eval("(" + req.responseText + ")");
                                glob=(data.retour==1);
                            }
                     }
    Puis ensuite quand tu en as besoin,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(glob){
     
    				alert("Déjà programmée !"); 
    				return false;
     
    			}else{
     
    				return true ; 
     
    			}
    Sinon j'ai proposé eval mais c'est pas top niveau sécu, mieux vaudrai utiliser la bibliothèque JSON, ou un framework comme JQuery. Sinon il faut toujours s'assurer que php ne renvoie pas d'espace ou de saut de lignes (par ex en dehors des balises php, un saut de ligne intempestif est si vite arrivé et si difficile à déceler).
    @+
    Piero

    Edit:
    pour ton "ok", le pbm est le même il doit y avoir un espace avant ou après.

  5. #5
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 728
    Points : 632
    Points
    632
    Par défaut
    Merci pour ton aide, je suis en vacances quelques jours et je n'ai accès à mon poste de dev.

    Dès que je rentre je teste ça et donne des nouvelles sur le forum.

    Bonne journée

    Olivier

  6. #6
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 728
    Points : 632
    Points
    632
    Par défaut
    Bonsoir,

    effectivement en faisant un controle sur la longueur de la chaine retournée, j'ai une taille de 6 caractères pour un OK.

    J'ai nettoyé tout ça et ça marche !

    Merci encore


    Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] comparaison de variables
    Par cheucher dans le forum Langage
    Réponses: 17
    Dernier message: 21/02/2006, 13h03
  2. [Conception] Erreur syntax, comparaison de variables
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/02/2006, 16h10
  3. Comparaisons de variables et récup valeur mini
    Par pegase23 dans le forum Access
    Réponses: 4
    Dernier message: 02/01/2006, 11h36
  4. Comparaison sur variable de type Binary (32)
    Par krapno dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 12h48
  5. Probleme comparaison de variable
    Par dynxd dans le forum Access
    Réponses: 2
    Dernier message: 02/10/2005, 21h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo