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

AJAX Discussion :

Un morceau de code semble bloquer la suite


Sujet :

AJAX

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut Un morceau de code semble bloquer la suite
    Bonjour,

    Soit un formulaire d'inscription d'un étudiant qui comprend de nombreux champs.

    Suite à la saisie du numéro d'étudiant ou de son numéro INE, je lance un script Ajax de récupération des informations déjà existantes en BDD.

    J'arrive sans problème à récupérer et afficher un paquet d'informations mais l'une de ces récupérations semble bloquer la suite.

    Première partie du code qui fonctionne :
    Code Javascript : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    function recupererEtudiant(champ)
    {
    	var chemin = baseChemin();
    	var objData = {};
    	var numEtudiant;
    	var message;
    	var adrel;
     
    	if ($("#etudiantId").val() == "" && $("#" + champ).val().trim() != "")
    	{
    		// Si l'étudiant n'est pas déjà identifié 
    		// et si le numéro ou l'INE de l'étudiant n'est pas vide, on cherche l'étudiant portant ce numéro
     
    		numEtudiant = $("#" + champ).val().trim();
    		objData = {numEtudiant: numEtudiant, param: champ};
     
    		$.ajax({
    			url: chemin + '/fr/Inscription/aj_recup_etudiant',
    			data: objData,
    			dataType: 'json',
    			cache: 'false',
    			type: 'POST',
    			success: function (infos_etudiant)
    			{
    				/* On compare les infos déjà saisies aux infos récupérées
    				 * On remplit les champs encore vides
    				 * On affiche une alerte si un champ non vide a une valeur différente de l'information récupérée
    				 */ 
     
    				/* *** Identifiant de l'étudiant *** */
    				$("#etudiantId").val(infos_etudiant.etuId);
     
    				/* *** Nom usuel de l'étudiant *** */
    				if($("#nomUsuel").val().trim() == "")
    				{
    					// Nom usuel vide : on affecte la valeur récupérée
    					$("#nomUsuel").val(infos_etudiant.etuNomUsuel);
    				}
    				else if($("#nomUsuel").val().trim() != infos_etudiant.etuNomUsuel)
    				{
    					message = "Le nom usuel déjà saisi (" + $("#nomUsuel").val().trim()
    						+ ") de l'étudiant n° " + numEtudiant
    						+ " est différent du nom enregistré en base de données : " + infos_etudiant.etuNomUsuel;
    					alert(message);
    				}
    // Une série d'autres récupérations du même style fonctionne

    Ensuite, j'ai un sous-tableau dans le JSON qui permet de récupérer l'adresse électronique :
    Code Javascript : 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
    18
    19
    20
    21
    22
    23
    				/* *** Adrel *** */
    				if(typeof infos_etudiant.adrel !== 'undefined')
    				{
    					// Une adrel trouvée pour l'étudiant
    					adrel = infos_etudiant['adrel']['0'];
     
    					if($("#adrel").val().trim() == "")
    					{
    						// Adrel non encore saisie => on affiche celle récupérée
    						$("#adrel").val(adrel.adrelRacine);
    						$("#idAdrel").val(adrel.adrelId);
    						$("#domaineInternet").val(adrel.adrelDomaine);
    						$("#domaineInternetId").val(addrel.adrelIdDomaine);
    					}
    					else if($("#adrel").val().trim() != adrel.adrelRacine)
    					{
    						message = "L'adresse électronique déjà saisie (" + $("#adrel").val()
    							+ ") de l'étudiant n° " + numEtudiant
    							+ " est différente de celle enregistrée en base de données : " 
    							+ adrel.adrelRacine + "@" + adrel.adrelDomaine;
    					}
    				}
    				alert("test");
    La récupération fonctionne, l'adrel s'affiche bien mais le alert("test"); que j'ai placé n'affiche rien et la suite du code de récupération ne s'affiche pas.

    Si je commente toute cette partie de récupération de l'adrel, le alert("test"); s'affiche et la suite du code s'exécute.

    Je ne comprends pas ce qui peut bloquer.

    Une idée à me soumettre ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- oui : regarde dans la console.
    Ça raconte quoi ?


    2- Mets d'autres console.log et/ou alert à l'intérieur des if, pour voir où passe le code.


    N.B.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    						message = "L'adresse électronique déjà saisie (" + $("#adrel").val()
    							+ ") de l'étudiant n° " + numEtudiant
    							+ " est différente de celle enregistrée en base de données : " 
    							+ adrel.adrelRacine + "@" + adrel.adrelDomaine;
    Si je comprends bien :
    on peut taper un email bidon, et on obtient le VRAI EMAIL enregistré en BDD ??
    Ca craint un peu, question "sécurité", non ?

    Perso, je ne mettrais pas la dernière ligne...

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Ca craint un peu, question "sécurité", non ?
    Sur le plan général, oui.
    Sur le plan pratique, réel, ça reste une appli interne (inaccessible de l'extérieur) réservée aux personnes gestionnaires de nos publics en formation. Donc le risque est faible.

    2- Mets d'autres console.log et/ou alert à l'intérieur des if, pour voir où passe le code.
    C'est justement ce que j'ai fait, ce qui m'a permis de détecter que c'est ce morceau de code qui bloque la suite alors qu'il fonctionne normalement.

    En l'occurrence, l'exécution passe par // Adrel non encore saisie => on affiche celle récupérée donc normalement ensuite on sort de if($("#adrel").val().trim() == "") puis de if(typeof infos_etudiant.adrel !== 'undefined') et ça devrait afficher l'alert mais non.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Invité
    Invité(e)
    Par défaut
    1- Moi, quand je ne sais pas, je fais ça :
    Code JavaScript : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    				/* *** Adrel *** */
    console.log( 'typeof infos_etudiant.adrel : ' + typeof infos_etudiant.adrel );
    				if(typeof infos_etudiant.adrel !== 'undefined')
    				{
    console.log( 'OK, infos_etudiant.adrel est défini' );
    					// Une adrel trouvée pour l'étudiant
    					adrel = infos_etudiant['adrel']['0'];
    console.log( 'adrel : ' + adrel );
     
    					if($("#adrel").val().trim() == "")
    					{
    console.log( 'OK, #adrel.val pas vide' );
    console.log( 'adrel : ' + adrel );
    console.log( 'adrel.adrelRacine : ' + adrel.adrelRacine );
    console.log( 'adrel.adrelId : ' + adrel.adrelId );
    console.log( 'adrel.adrelDomaine : ' + adrel.adrelDomaine );
    console.log( 'adrel.domaineInternetId : ' + adrel.adrelIdDomaine );
    						// Adrel non encore saisie => on affiche celle récupérée
    						$("#adrel").val(adrel.adrelRacine);
    						$("#idAdrel").val(adrel.adrelId);
    						$("#domaineInternet").val(adrel.adrelDomaine);
    						$("#domaineInternetId").val(addrel.adrelIdDomaine);
    					}
    					else if($("#adrel").val().trim() != adrel.adrelRacine)
    					{
    console.log( 'OK, #adrel.val différent de adrel.adrelRacine' );
    						message = "L'adresse électronique déjà saisie (" + $("#adrel").val()
    							+ ") de l'étudiant n° " + numEtudiant
    							+ " est différente de celle enregistrée en base de données : " 
    							+ adrel.adrelRacine + "@" + adrel.adrelDomaine;
    console.log( 'message : ' + message );
    					}
    				}
    				alert("test");
    ... et je regarde ce qui s'affiche dans la console.


    2- D'autre part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    					else if($("#adrel").val().trim() != adrel.adrelRacine)
    Ca ne devrait pas plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    					else if($("#adrel").val().trim() != adrel.adrelRacine + "@" + adrel.adrelDomaine)
    ?

    3- Quant à la variable JS "message", tu ne l'affiches pas ?

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Trouvé !

    $("#domaineInternetId").val(adrel.addrelIdDomaine); => adreIdDomaine avec un seul d ça fonctionne mieux !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 450
    Points : 4 600
    Points
    4 600
    Par défaut
    Salut,

    je sais que le probleme est resolu, mais c'etait pour completer le "debuggage" de jreaux62
    plutot que de faire des console.log('toto' + var); je passe par les arguments du log
    => concatener avec + si ta variable est un object ou un tableau => ca la castera en string, et tu n'auras que "object" comme info de debug

    console.log('-------------------\ntoto', var); avec ca, tu as un dump de la variable, quelque soit son type, et pas non plus besoin de console.log() chaque element de ta variable

    au lieu de :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    console.log( 'OK, #adrel.val pas vide' );
    console.log( 'adrel : ' + adrel );
    console.log( 'adrel.adrelRacine : ' + adrel.adrelRacine );
    console.log( 'adrel.adrelId : ' + adrel.adrelId );
    console.log( 'adrel.adrelDomaine : ' + adrel.adrelDomaine );
    console.log( 'adrel.domaineInternetId : ' + adrel.adrelIdDomaine );
    tu as :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    console.log( 'OK, #adrel.val pas vide' );
    console.log( 'adrel : ', adrel );//et dans la console, tu peux "explorer" la variable
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

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

Discussions similaires

  1. [WD-2003] Execution d'un morceau de code suite à un évènement
    Par Titiii25 dans le forum VBA Word
    Réponses: 4
    Dernier message: 10/06/2010, 10h44
  2. executer code sans bloquer l'aplication
    Par laftah71 dans le forum Access
    Réponses: 2
    Dernier message: 10/11/2006, 19h00
  3. Traduction du code oracle vers SQL - suite
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/11/2005, 15h40
  4. Réponses: 12
    Dernier message: 09/02/2005, 00h42
  5. [JSP] [include] inclure un morceau de code
    Par viena dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/01/2005, 12h51

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