Transfert de variable entre 2 scripts de la même page
achem40
Messages postés9Date d'inscriptionlundi 14 avril 2008StatutMembreDernière intervention29 mai 2008
-
25 mai 2008 à 20:19
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 2013
-
30 mai 2008 à 07:50
Bonjour,
je ne suis pas très sur que ce soit possible, mais j'aimerais transférer la valeur d'une variable d'un script dans un autre dans la même page. Autrement dit, une variable a-t-elle une visibilité hors du script où elle a été créee ?
Mon premier script qui crée la variable est lancé par un evenement onload depuis la balise
Mon second script est écrit dans la page dans une balise div (entre
et
) : impossible de récupérer la variable créée en amont !
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 26 mai 2008 à 10:24
Bonjour,
pas compris du tout la question....
<script>
var toto="exemple";
</script>
tout le html qu'on veut
<script>
alert(toto);
</script>
même s'il y a 256 scripts dans la même page,
les variables y sont toutes communes, si elles
sont déclarées en globale, toutes les function
sont accessibles....
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 26 mai 2008 à 10:29
je viens de percuter ?
dans la fonction que tu appelles avec onload,
si tu fais var toto="exemple"; c'est une variable localae
uniquement accessible dans cette fonction, pas ailleurs.
déclare là hors de la fonction ( var toto; ) et initialise
la dans la fonction ( toto="exemple"; )
<hr />
Cordialement Bul [mon Site] [M'écrire]
achem40
Messages postés9Date d'inscriptionlundi 14 avril 2008StatutMembreDernière intervention29 mai 2008 27 mai 2008 à 14:55
Merci Bultez pour l'intérêt que tu portes à mon problème... Je n'y parviens toujours pas, il y a un bug que je ne trouve pas !
Voudrais-tu examiner mon code ?
Je n'adresse qu'une partie du code mais c'est suffisant pour analyser le problème.
Il s'agit de l'affichage de marqueurs sur une carte GoogleMaps.
J'ai déjà réalisé des projets semblables ici : http//michel.hillon.free.fr/test
J'ai parcouru ton site : très riche, j'y reviens bientôt !
Voici le code en faute et bravo (et merci) si tu trouves :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"></gras>
<html xmlns= " http://www.w3.org/1999/xhtml "</gras>
xmlns:v ="urn:schemas-microsoft-com:vml"> <head><meta http-equiv"content-type" content"text/html; charset= UTF-8"/> <title> Google Maps Example: Icones et base donn'es</title> <script src = "http://maps.google.com/maps?file= api&v=2&key=ABQIAAAAO29Cc87_raAqE1ueII0RVhSfEneASBiKBZCGDd1WGa7So5zNHBRqMzxcvOyIM1VYlZwVU3KdwjMc3w "</gras>
type = "text/javascript"></script>
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 27 mai 2008 à 15:19
et pour simplifier....
<script>
var v1=1;
var v2;
function t1()
{ v2=2;
var v3=3;}
</script>
n'importe quoi
<script>
t1();
alert(v1); // ça baigne ! c'est une variable globale
alert(v2); // ça baigne ! c'est une variable globale
alert(v3); // ça baigne pas ! c'est une variable locale à t1
</script>
achem40
Messages postés9Date d'inscriptionlundi 14 avril 2008StatutMembreDernière intervention29 mai 2008 27 mai 2008 à 17:35
Merci pour tes efforts pédagogiques, je connais les principes var publique et locale... ma variable est bien publique ! il y a autre chose, je dois rafraichir pour obtenir le résultat !
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 27 mai 2008 à 17:53
>>je connais les principes var publique et locale
ne prend pas la mouche ! je ne suis pas censé connaître ton niveau !
compte tenu de ce que tu expliquais, c'était une piste tout à fait possible
( et on parle de variable globale, pas publique )
>>il y a autre chose,
certes... tu as rectifié les erreurs ?
tant qu'il en restera, on ne pourra guère aller plus loin
ce serait inutile.
>>merci quand même
comment ça quand même ?
je cherche à t'aider ! non ?
achem40
Messages postés9Date d'inscriptionlundi 14 avril 2008StatutMembreDernière intervention29 mai 2008 27 mai 2008 à 18:35
D'accord pour "globale" ....
L'erreur signalée par FireFox :
Erreur : uncaught exception:
Permission refusée d'appeler la méthode XMLHttpRequest.open
Je ne sais pas interpréter cette erreur, je n'appelle pas cette méthode dans mon code ...
Il y a des avertissements au sujet des CSS mais je sais ce que c'est.
Quant à IE7, impossible de charger le debogger. Script editor plante IE7 sous Vista ... Je n'ai pas d'alternative....
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 28 mai 2008 à 05:57
la permission refusée vient du script Google
avec FF, avec IE ça baigne semble-t-il
l'exemple qu tu fournis, pas simple !
si on le reprend il manque des espaces partout, c'est en utf 8...
mais en l'état ( malgré la permission refusée ! ), ça semble marcher
<script type="text/javascript">
var combien
var nom=[]
var coord=[]
var bulle=[]
var passe=[]
var map
var Paris
var France
// Ajout de marqueurs ? partir de base de donn'e "data.xml" sur le serveur
GDownloadUrl("http://michel.hillon.free.fr/test/data/data2.xml",function(data) {
var xml=GXml.parse(data);
var markers=xml.documentElement.getElementsByTagName("marker");
combien=markers.length
for(var i=0;i<combien;i++) {
coord[i]=new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
nom[i]=markers[i].getAttribute("nom");
bulle[i]=" "+nom[i]+"
"+markers[i].getAttribute("adresse")+"
"+
markers[i].getAttribute("codepostal")+" "+markers[i].getAttribute("ville");
passe[i] =false
}
});
function initialize() {
if(!GBrowserIsCompatible()) { alert("D?sol?, votre navigateur ne peut ex?cuter le Javascript...");returnfalse;}
map=new GMap2(document.getElementById("map_canvas"));
Paris=new GLatLng(48.853251,2.348456);
France=new GLatLng(46.694667,2.559814);
map.setCenter(Paris,12);
map.addControl(new GLargeMapControl());
new GKeyboardHandler(map);
achem40
Messages postés9Date d'inscriptionlundi 14 avril 2008StatutMembreDernière intervention29 mai 2008 28 mai 2008 à 17:24
Vraiment, on peut dire que tu te donnes du mal, surtout si ton micro est š€ l'heure, j'ai ici une heure d'šŠmission š€ 5:57 !!!
J'ose š€ peine t'importuner encore... J'ai mieux isolšŠ le problššme. La variable combien est bien globale, elle est modifišŠe par la fonction qui est passšŠe en paramšštre š€ GDownloadUrl(). Mais dššs qu'on sort de cette foutue fonction, la variable est indšŠfinie, perdue !!! incroyable.
L'extrait de code suivant permet d'isoler la manoeuvre:
<script
type= "text/javascript">
combien =
0
nom =
[]
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 28 mai 2008 à 18:40
tu aurais di regarder avec 2 alert....
le 2ème est déclenché avant le 1er !
les joies de l'asynchrone avec le javascript !
<hr /> Cordialement Bul [mon Site] [M'écrire]
achem40
Messages postés9Date d'inscriptionlundi 14 avril 2008StatutMembreDernière intervention29 mai 2008 28 mai 2008 à 19:14
Non, je ne vois pas ce qu'il me reste à faire ... Au premier lancement, l'alerte deux est toujours indéfinie, ce n'est que lorsqu'on rafraichit l'explorateur que cette variable est implémentée !
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 29 mai 2008 à 06:51
le javascript/html c'est de l'asynchrone.
tu lances GDownloadUrl ( ça prend un certain temps )
le html/javascript, ben ça continue à s'exécuter ! et : on arrive dans le
2ème script avant que la fonction GDownloadUrl ne réponde.
donc, dans le 2ème script attend tant que GDownloadUrl n'a pas répondu
( la plus mauvaise solution je pense )
inclus ce script à la place de alert("un:"....
met ce script dans une fonnction qui sera appelée à la place de alert("un:"....
...
<hr /> Cordialement Bul [mon Site] [M'écrire]
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 30 mai 2008 à 07:50
>>Un alert("Attente..") intercalé en sortie de la fonction GDownloadUrl() et c'est gagné :
oui mais pas "viable"
>>aurais-tu une idée pour effectuer un timing en boucle, pour éviter la boite de dialogue ?
comme j'indiquais, probablement la pire des solutions !
mais si tu y tiens : initialise combien à false
setTimeout qui bouble tant que !combien
setTimeout, sinon on boufferait tout le cup
mais c'est la pire des solutions !
met ton code à la pace de aler("un:"....
ou à la place de alert("un:"... appelle une fonction qui contient ton code
dans l'appel GDownloadUrl il y a une fonction(data), c'est du à
cet asynchronisme ( euh... c'est français ça ? ), sinon, on
pourrait coder "derrière l'appel" !