IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> RESOLU: Pb javascript, portée d'un tableau ???
Options
jala
posté 23 Jan 2012, 19:52
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 98
Inscrit : 19 Sep 2004
Membre no 23 838



Dans mon application webapp je veux autoriser l'accès à une fonction selon que l'on est ou pas à proximité d'un lieu, donc je ne cherche pas à afficher une carte google map mais simplement à vérifier les coordonnées du mobile:
pour cela dans mon header j'ai ce morceau de code
CODE
<head>
....

<script>
function locate() {
window.navigator.geolocation.getCurrentPosition(successCallback, failureCallback);
}
function successCallback(position) {
my_coord = new Array(position.coords.latitude,position.coords.longitude);
alert("lat : " + my_coord[0] +", Long: " + my_coord[1]);
}
function failureCallback(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
alert("Échec du positionnement. Veuillez vérifier que le service de localisation est activé et que vous avez autorisé son utilisation par l'application.");
break;
case error.TIMEOUT:
case error.POSITION_UNAVAILABLE:
alert("Échec du positionnement. Cela se produit souvent lorsque vous vous trouvez à l'intérieur d'un bâtiment.");
break;
default:
alert("Erreur inconnue.");
}
}
</script>
....

</head>

et dans mon body à un moment donné j'ai ceci (pour essais)
CODE
<body>
.....

<script>
document.write("Toto");
locate();
document.write("Lat " + my_coord[0]);
document.write("Long "+ my_coord[1]);
</script>
...
</body>

Lorsque j'affiche ceci de mon iphone l'alerte (donc locate() s'exécute bien) me donne bien les coordonnées (donc les valeurs de my_coord sont bien initialisées), mais je ne les retrouve pas dans body, pourquoi ?.
la seule valeur écrite est Toto, si je remplace les my_coord par des chaines ou des valeurs ils s'écrivent, mais là toute la ligne est absente donc est apparemment en erreur. J'ai essayé en déclarant my_coord = new Array(2) en début du script mais cela ne change rien...

J'ai fait un autre exemple avec un code semblable (sans geolocalisation) ailleurs (sous TextStatic) sur mon ipad ou entre head et body les valeurs de tables sont transmises dans l'aperçu de la page html, alors ???

Merci

Ce message a été modifié par jala - 24 Jan 2012, 12:20.
Go to the top of the page
 
+Quote Post
Bru
posté 23 Jan 2012, 20:40
Message #2


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 516
Inscrit : 7 Oct 2001
Membre no 962



Il y a 2 erreurs majeures dans ton code.

1.
Le tableau my_coord est local à une fonction (il est déclaré dans la fonction successCallback).
Donc, cela a 2 conséquences :
- tout ce qui est extérieur à la fonction ne peut "voir" (accéder) à ce tableau,
- à la fin de la fonction, ce tableau est détruit.

2.
geolocation.getCurrentPosition est asynchrone.
Donc, la recherche de la géolocalisation se fait en tâche de fond...
C'est pourquoi, il faut fournir en paramètre à cette méthode les fonctions de traitement de la localisation (et de son échec), fonctions qui seront appelées ultérieurement.
Au moment où ton <body> s'affiche, il plus que sûr que la géolocalisation ne soit pas encore terminée.
Il est donc inutile de tenter de récupérer le résultat de la localisation au moment de l'affichage du <body>.

Ce message a été modifié par Bru - 23 Jan 2012, 20:41.
Go to the top of the page
 
+Quote Post
jala
posté 23 Jan 2012, 21:50
Message #3


Adepte de Macbidouille
*

Groupe : Membres
Messages : 98
Inscrit : 19 Sep 2004
Membre no 23 838



Merci de ces informations, je pense que mon souci numéro un vient du caractère asynchrone de geolocalisation, car cela va me gêner pour récupérer un booléen sur la position ( que je peux mettre à false ou true par un test dans successCallback) et pour afficher sur ma page ce que je veux selon le résultat (en fait c'est un bouton d'ouverture de portail qui ne doit pas être actionnable de trop loin).
Je vais plancher un peu plus, merci encore cela m'a débloqué de mon impasse actuelle...
Go to the top of the page
 
+Quote Post
jala
posté 24 Jan 2012, 12:18
Message #4


Adepte de Macbidouille
*

Groupe : Membres
Messages : 98
Inscrit : 19 Sep 2004
Membre no 23 838



En fait et grâce à cet avis je fais maintenant une modification de la visibilité et de l'activation du bouton qui lance mon script ccgi en fonction de ma géolocalisation, dans les fonctions liées à cette géolocalsiation. Et cela satisfait mon besoin.
Encore merci de m'avoir aidé à mieux comprendre... biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 26th April 2024 - 09:20