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 :

Changement de valeur entre 2 lignes


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de ForgetTheNorm
    Homme Profil pro
    Docteur en informatique
    Inscrit en
    Novembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut Changement de valeur entre 2 lignes
    Bonjour

    Je viens à vous car j'ai un phénomène inexpliqué. Pour résumer mon problème, j'ai un calcul qui se lance via l'API de Google Maps, qui fait son calcul et lance une fonction une fois le résultat calculé. La fonction lancée modifie des valeurs de mon tableau, et j'aimerai avoir ces valeurs.

    Le code est ici
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function getLatLong(address) {
    // J'initialise les éléments du tableau
    	document.getElementById("lat").innerHTML = "";
    	document.getElementById("lng").innerHTML = "";
    	if (geocoder) {
    		geocoder.setBaseCountryCode('fr');
    		geocoder.getLatLng(
    			address,
    // Ici la fonction retournée une fois la latitude/longitude calculée
    			function(point) {
    				if (!point) {
    					document.getElementById("lat").innerHTML = "null";
    					document.getElementById("lng").innerHTML = "null";
    				} else {
    					document.getElementById("lat").innerHTML = point.lat().toFixed(7);
    					document.getElementById("lng").innerHTML = point.lng().toFixed(7);
    					alert("Retour de Google : " + document.getElementById("lat").innerHTML);
    				}
    			}
    		);
    	}
    // Un count pour éviter que la fonction tourne en boucle (temporaire, pour les tests)
    	count = 0;
    	while ((document.getElementById("lat").innerHTML == "") && (count < 10000)) { count++; }
    	alert("Fin du while : '" + (document.getElementById("lat").innerHTML) + "'");
    	return "Return final : '" + (document.getElementById("lat").innerHTML) + "' (" + count + ")";
    }
    Je lance simplement cette fonction en faisant un alert() du résultat.

    Mon problème est le suivant. J'ai 3 alerts :
    1) L'alerte "Retour de Google", qui affiche la bonne latitude
    2) L'alert "Fin du while", qui retourne ""
    3) L'alert du retour de fonction, qui retourne la bonne latitude.

    Si je supprime la ligne "Fin du while", j'obtiens 2 alerts :
    1) L'alert "Retour de Google", qui affiche la bonne latitude
    2) L'alert du retour de fonction, qui retourne "".

    Avez vous une idée d'où vient le problème ?

    Pierre

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

    La requête du geocoder étant assynchrone, le while se termine avant, donc lat = "" car résultat pas encore fourni. Puis le temps que tu cliques sur ok, la requête s'est terminée, donc le retour de la fonction donne le bon lat.

    Bref alert("fin du while...") fait office de timer.

    Il faut gérer le retour du géocoder en positionnant un flag genre

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    var flag = null;
     
    function getLatLong(address) {
    // J'initialise les éléments du tableau
    	document.getElementById("lat").innerHTML = "";
    	document.getElementById("lng").innerHTML = "";
    	if (geocoder) {
    		geocoder.setBaseCountryCode('fr');
                    flag = true;
    		geocoder.getLatLng(
    			address,
    // Ici la fonction retournée une fois la latitude/longitude calculée
    			function(point) {
    				if (!point) {
    					document.getElementById("lat").innerHTML = "null";
    					document.getElementById("lng").innerHTML = "null";
    				} else {
    					document.getElementById("lat").innerHTML = point.lat().toFixed(7);
    					document.getElementById("lng").innerHTML = point.lng().toFixed(7);
    					//alert("Retour de Google : " + document.getElementById("lat").innerHTML);
    				}
     
                                    flag = !flag;
    			}
    		);
    	}
    // Un count pour éviter que la fonction tourne en boucle (temporaire, pour les tests)
    	//count = 0;
    	while (flag) { /* ici mettre un test pour timeout  qui positionnera flag à 0 au cas ou! */ }
    	//alert("Fin du while : '" + (document.getElementById("lat").innerHTML) + "'");
    	return "Return final : '" + (document.getElementById("lat").innerHTML) + "' (" + count + ")";
    }
    Quelque chose de la sorte.

    A+

Discussions similaires

  1. [AC-2007] Calcul d'écart de valeur entre chaque ligne d'un champ d'une requête
    Par Ahlmael dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/12/2014, 11h54
  2. Différence valeur entre ligne
    Par doudoustephane dans le forum Requêtes
    Réponses: 9
    Dernier message: 13/05/2011, 12h36
  3. UPDATE valeur incrémentée entre chaque ligne
    Par Ciseur dans le forum MySQL
    Réponses: 2
    Dernier message: 26/03/2010, 10h32
  4. Réponses: 11
    Dernier message: 10/01/2010, 22h22
  5. Réponses: 8
    Dernier message: 11/07/2009, 19h09

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