Rechercher : dans
Par :

Variable globale javascript

Dernière réponse le 23 jan 2009 à 09:36:52 KaTa_TaKa, le 22 jan 2009 à 09:40:51 
 Signaler ce message aux modérateurs

Bonjour,
Je voudrais savoir comment est ce qu'on peut faire pour declarer une variable globale, et comment on peut y acceder durant toute notre connexion ... ( comme $_SESSION en PHP ) ...
moi j'ai declaré une variable globale dans un script,et quand je l'appelle à partir d'un autre script, ça marche pas il me dit que ma variable n'est pas definie ...
en fait c'est un peu bizarre mon truc parce que dans le script j'ai deux variable globale :

tableauJS = new array()
i=0;

tableauJS marche nickel aucun probleme, j'y accede partout mais le probleme c'est ma variable i ...
c'est un peu louche non ?
Merci d'avance

Configuration: Windows XP
Firefox 3.0.5

Meilleures réponses pour « variable globale javascript » dans :
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...
PHP - Les variables VoirConcept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...

1

Groarh, le 22 jan 2009 à 13:00:41

Salut,
dans tous les cas, si tu déclares une variable sans var, elle sera globale.
Autrement, si tu déclares une variable avec var, elle est locale au bloc dans lequel elle est déclarée, ex. :

function foo() {
    var n;
    // ...
}

n sera locale à la fonction foo. Si tu utilises var à la "racine" de ton script, elle est en fait locale à window, ce qui est équivalent à globale.

Ton problème vient, je pense, d'un changement de portée. Par exemple :
i = 7;
function change() {
    var i = 5;
    // ici i == 5
}
// ici i == 7

Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
Ou inversement, il a été défini dans un niveau qui n'est plus accessible :
function def() {
    var i = 11;
}
alert(i); // ici, i n'est plus à portée


En tout cas, j'ai fait des tests avec un tableau, déclaré avec ou sans new, ça ne change rien. Ce n'est pas parce que c'est un tableau qu'il est "plus facilement" global.

Refais tes tests, et donne-moi des nouvelles ;)

Répondre à Groarh

2

KaTa_TaKa, le 22 jan 2009 à 14:56:33

Salut groarh !!

>>Lorsque tu testes ton i, tu es peut-être à un niveau où il a été redéfini.
>>Ou inversement, il a été défini dans un niveau qui n'est plus accessible :

tu veux dire quoi par le terme "niveau" ?

Répondre à KaTa_TaKa

3

Groarh, le 22 jan 2009 à 15:58:18

Eh bien, c'est la "zone", ou encore la "portée" de la variable, son "degré de localité". Je ne sais pas comment l'expliquer bien … Petit schéma :

// niveau global
function machin () {
	// niveau de la fonction machin
	var a;
	while (...) {
		// niveau de la boucle while
		var b;
	}
}

Une variable locale à un niveau n'est pas visible au niveau supérieur, par exemple ici a n'est pas visible depuis le niveau global, et b n'est visible ni par le niveau machin ni par le niveau global.

Regarde ceci : http://performance.survol.fr/2008/05/portee-des-variables-javascript/

;)

Répondre à Groarh

4

KaTa_TaKa, le 22 jan 2009 à 16:01:34

Oui cela je l'avais compri mais je parlais par rapport à mon code ...
je vais essayer de mieux expliquer mon code :

alors j'ai une page accueil.php (faites pas attention à la syntaxe0) :

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<script language="javascript">
i=0;
tableau= new array();

function charger(para){
i=para;
grace à cette fonction je met des valeur dans ma page ( grace à document.getElementById
) les données sont enregistré dans la variable tableau que j'ai alimenter avec une autre fonction ...
(cela marche tres bien ... )
}
function recuperer(repertoire){
repertoire = tableau[i][3]; // tableau[i][3] contien la valeur de mon repertoire
return repertoire;
}

</script>
<body>
....
<?php
switch($_GET['lien']){
case "abum":
include("album.php");
break;
case "galerie":
include("galerie.php");
break;

}
?>
....
</body>

qd je suis sur la page "accueil.php?lien=galerie" (c'est toujours la mm page mais dans body je charge galerie.php) j'ai un lien :

<a href="accueil.php?lien=">lien</a>

dans ma page
"accueil.php?lien=album" j'ai
<?php
echo "<scripte language="javascript">"
echo "repertoire = recuperer(repertoire);";
echo "</script>";
?>
<body onLoad(charger(para))>
// le parametre para incremente ou decremente grace à des fonction javascript qui marche bien
....
....
</body>

voila voila j'espere que j'etais clair si vous ne comprenez pas vous me dites ... merci d'avance

Répondre à KaTa_TaKa

5

Groarh, le 22 jan 2009 à 16:10:30

Je crois que j'ai compris : à un moment tu recharges ta page avec une requête GET. À ce moment là, peu importe que ce soit la même page, il y a rechargement, donc toutes tes variables disparaissent.

Répondre à Groarh

6

KaTa_TaKa, le 22 jan 2009 à 16:23:23

Est ce que tu sur que c'est à cause de ça ? et si c'est le cas ... comment est ce que je peux faire pour recuperer une donnée qd on recharge la page ? j'ai deja pensé à utiliser les coukies mais je sais pas c'est une bonne technique ...
Merci pour ton aide

Répondre à KaTa_TaKa

7

Groarh, le 22 jan 2009 à 18:33:33

Bof … moi j'ai jamais recours aux cookies, je trouve ça trop instable. Les sessions PHP ont été conçues pour faciliter le passage des données entre les pages, autant s'en servir !
Et là l'argument est d'autant plus fort que JavaScript ne sert vraiment pas à ça.

Ça te simplifiera la vie, tu verras ;)

Répondre à Groarh

8

 KaTa_TaKa, le 23 jan 2009 à 09:36:52

Salut tout le monde !!!
j'ai utilisé les cookies et ça matche nickel ... je sais pas si c'est propre ( techniquement parlant ) mais en tout cas ça marche ...

Répondre à KaTa_TaKa