Comme passer la valeur d'une ou plusieurs variables d'une page à une autre ?

Une méthode commode consiste à passer la ou les variable(s) dans l'URL de la page demandée et à la/les récupérer à lors du chargement de cette page. Au lieu de demander simplement le nom du fichier page.html, on va demander quelque chose comme page.html?var1='toto';var2=5;. Le navigateur comprendra que ce qui suit le «?» est une requête spéciale.

Du côté de la page appelante, on va donc

  1. générer la chaîne de requête :
        var requete="var1='"+var1+"';var2="+var2+";" ;
    (avec var1 qui vaut toto et var2 qui vaut 5, on obtient bien var1='toto';var2=5; . Notez que c'est bien du javascript en fin de compte et qu'il a fallu rajouter des quotes autour des noms des variables, puisque ce sont des chaines de caractères)
  2. On va ensuite « url-encoder  » :
        requete = escape(requete) ;
  3. puis appeler la 2ème page :
        window.location.href = "page.html?" + requete ;
    (surtout ne pas oublier le « ? »)

On passe maintenant sur le fichier page.html, où il s'agit de récupérer var1 et var2 .

  1. On va déclarer les variables que l'on veut récupérer, et on en profitera pour leur donner des valeurs par défaut qu'elles garderont si elles n'ont pas été passée dans la chaîne de requête :
        var var1 = "défaut", var2 = 0 ;
  2. On va récupérer tout ce qui suit le nom du fichier :
        var requete = window.location.search ;
  3. Si cette chaine est vide, on en reste aux valeurs de défauts, sinon on opère sur la sous-chaine commençant après le 1er caractère (le « ? »)
        if (requete) {
       requete=requete.substring(1) ;
  4. on « url-décode  » cette chaine :
        requete = unescape(requete) ;
  5. et enfin, puisqu'on a pris soin de générer du javascript, on l'exécute :
        eval(requete); }
    (le « } » final ferme le test if (requete) )

On se retrouve alors dans notre exemple avec une variable var1 contenant la chaine toto et une variable var2 valant 5.

On peut bien sûr s'y prendre autrement pour passer et récupérer ces variables, cette méthode a l'avantage d'être très simple à mettre en oeuvre.

Remarque : le url-encodage est une technique de sécurité pour éviter que des caractères spéciaux n'aillent se balader dans les noms de fichier et entrainer des réactions désagréables du serveur. L'inconvénient est que le script précédent ne marcherait pas directement en local avec Explorer 5 (et sans doute 4), qui, dans notre exemple, chercherait en vain un fichier page.html?var1%3D%27toto%27%3Bvar2%3D5%3B sur le disque. Il faudra donc désactiver provisoirement cet encodage/décodage lors des mises au point en local.

(TOM)