Transfert de variable entre 2 scripts de la même page

achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 mai 2008 - 25 mai 2008 à 20:19
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 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 !

Quelqu'un aurait-il une piste ?

17 réponses

nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
25 mai 2008 à 21:00
Salut,

peut être avec ajax en utilisant la methode get !

a++

Si la réponse vous convient, pensez : Réponse accepté !
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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....

<hr />
                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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]
0
achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 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&amp;v=2&amp;key=ABQIAAAAO29Cc87_raAqE1ueII0RVhSfEneASBiKBZCGDd1WGa7So5zNHBRqMzxcvOyIM1VYlZwVU3KdwjMc3w "</gras>
type = "text/javascript"></script>

<script type ="text/javascript">
varcombien

varnom
=
[]

var coord
=
[]

varbulle
=
[]

var passe
=
[]

varmap

varParis

varFrance

// 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
) {

varxml
= GXml
.parse
(data
);

varmarkers
= xml
.documentElement
.getElementsByTagName
( "marker"
);
combien
= markers
.length

for
(vari
=
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
}
}
);

functioninitialize
() {

if
(!GBrowserIsCompatible
()) { alert
("D?sol?, votre navigateur ne peut ex?cuter le Javascript..."
);return
false;}
map
=
new GMap2
(document
.getElementById
( "map_canvas"
));
Paris
=
newGLatLng
(48.853251,
2.348456)
;
France
=
new GLatLng
(46.694667,
2.559814)
;
map
.setCenter
(Paris
,
12);
map
.addControl
(newGLargeMapControl
());

newGKeyboardHandler
(map
);

map
.addControl
(newGMapTypeControl
());
map
.removeMapType
(G_HYBRID_MAP
);
map
.addMapType
(G_PHYSICAL_MAP
);
}

functionderoule
() {

//alert(combien)

for
(vari
=
0;i
<combien
;i
++) {
document
.write
( "+i
+"' href= 'javascript:addMark(coord["
+ i
+<italique>"],"

+i
+",bulle["
+i
+"])'>"
+nom
[i
]
+"
"
);
}
}

</script>
<style type ="text/css">

<!--

body {
color:
darkgreen;width:
960px;background:
beige;font-family:
Arial, helvetica, sans-serif;margin-top:
10px}
#map_canvas {
width:
640px;height:
480px;float:
left;border:
thin ridge olivedrab;}
#divRight {
width:
290px;float:
right;}
#divBottom {
width:
620px;float:
left;padding:
10px;border:
thin hidden olivedrab}
#P0 {
font:
small/1.5 Arial, helvetica, sans-serif}
form {
color:
brown;padding:
.5em;border:
thin hidden gray;background-color:
transparent}
#form1 {
float:
left;font-size:
medium;margin:
1em}
#form2 {
float:
left;}
a {
text-decoration:
none;font-size:
small}
a:link {
color
:blue}

a:visited {
color:
slategray}
a:hover {
color:
brown}
a:active {
color:
red}
.bouton {
margin:
.5em;width:
160px}
-->
</style>
</head>

()<gras>"
onunload= "GUnload ()">


id ="mention">Marqueurs positionn?s ? partir de leurs coordonn'es
/>g?ographiques contenues dans une base de donn'es Xml

id= "map_canvas" >Emplacement de l'objet Google-Maps

id ="divRight">
Liste des amis

<script type="text/javascript">
alert(combien
)
deroule
();
</script>


</html>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 mai 2008 à 15:14
1° beaucoup trop long à exécuter avec mon pôvre modem 56k

2° il y a des erreurs de syntaxe     {    }    non équilibrés
•————————•——————————————————————————————————————————————————————————•
|FireFox |regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
| | et mieux, : télécharger FireBug |
•————————•——————————————————————————————————————————————————————————•
|Internet|activer le deboggage : Outils/options Internet/Avancés |
|Explorer| dans la liste, sous "Navigation" : décocher |
| | o Afficher une notification de chaque erreur de script |
| | o Désactiver le débogage de Scripts (Internet Explorer) |
| | et mieux, : télécharger le Debogger IE |
| | voir aussi : DebugBar et Companion JS |
•————————•——————————————————————————————————————————————————————————•
|K-Meleon|regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
•————————•——————————————————————————————————————————————————————————•
|Opera |regarder la "console d'erreurs" |
| | utils / Asole d'erreurs |
•————————•——————————————————————————————————————————————————————————•
|Safari |regarder Debug / Show JavaScript Console |
| | ° modifier Fichier Preferences.plist situé dans le |
| | répertoire : Support:\Documents and Settings\utilisateur |
| | \Application Data\Apple Computer\Safari\ |
| | y ajouter <key>IncludeDebugMenu</key> |
| | <true/> |
•————————•——————————————————————————————————————————————————————————•

après... on verra

tu n'as pas compris cette histoire de variables globales
ou locales ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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>

  

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]

[vous aussi, donnez une adresse où vous joindre, sans craindre les spams]
0
achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 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 !



http://michel.hillon.free.fr/test/mes_amis-24.html



merci quand même
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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 ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 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....

J'apprecie ton aide, merci (sans quand même...)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns= "http://www.w3.org/1999/xhtml"
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"
type="text/javascript"></script>

<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);

map.addControl(new GMapTypeControl());
map.removeMapType(G_HYBRID_MAP);
map.addMapType(G_PHYSICAL_MAP);
}

function deroule() {
//alert(combien)
for(var i=0;i<combien;i++) {
document.write("mon Site]     [M'écrire]
0
achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 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
=
[]

// 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
) {

varxml
=GXml
.parse
(data
);

varmarkers
= xml
.documentElement
.getElementsByTagName
( "marker"
);
combien
=markers
.length

for
(vari
=
0; i
<combien
;i
++) {
nom
[i
]
=markers
[i
].getAttribute
( "nom"
)
;
}

// alert(nom[3] + "\nNombre : " +combien) // ici, c'est OK!
}
);

// alert(nom[3] + "\nNombre : " +combien) // ici, c'est undefined !
</script>

</head>


Liste des amis

<script type = "text/javascript">
// alert(nom[3] + "\nNombre : " +combien) // ici, undefined !

for
(vari
=
0;i
<combien
;i
++) {
document
.write
("+i
+<italique>"' href='javascript:alert("

+nom
[i
]
+"'
"
);
}
</script>




 
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 mai 2008 à 18:42
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAO29Cc87_raAqE1ueII0RVhSfEneASBiKBZCGDd1WGa7So5zNHBRqMzxcvOyIM1VYlZwVU3KdwjMc3w"
type="text/javascript"></script>
<script type="text/javascript">
var combien=0;
var nom=[];

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++)
                        {    nom[i]=markers[i].getAttribute("nom");    }
                        alert("un:"+combien+"="+nom[combien-1]);
                    } );
</script>
</head>

Liste des amis

<script type="text/javascript">
alert("deux:"+combien+"="+nom[combien-1]);
</script>

    tu verras "deux:"0 undefined
    puis plus tard ;o))   "un:"28....

    tu vois ce qu'il te reste à faire....

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 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 !


Y a-t-il une astuce que je ne comprend pas ?
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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]
0
achem40 Messages postés 9 Date d'inscription lundi 14 avril 2008 Statut Membre Dernière intervention 29 mai 2008
29 mai 2008 à 18:42
Bravo !
tu as tout bon, l'analyse est parfaite, champion !
Un alert("Attente..") intercalé en sortie de la fonction GDownloadUrl() et c'est gagné :
http://michel.hillon.free.fr/test/mes_amis-21.html

aurais-tu une idée pour effectuer un timing en boucle, pour éviter la boite de dialogue ?

Merci beaucoup pour ton aide.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
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" !

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Rejoignez-nous