Convertir du texte en code javascript

Convertir du texte en code javascript - HTML/CSS - Programmation

Marsh Posté le 10-02-2011 à 14:05:01    

Bonjour,

 

Grâce à cette fonction :

 
Code :
  1. function displaytrace(gpx)
  2. {
  3. var xhr = getXMLHttpRequest();
  4. xhr.onreadystatechange = function() {
  5.  if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
  6.   var javascript=xhr.responseText;
  7.   data(javascript);
  8.  }
  9. };
  10. xhr.open("POST", "ajax.php", true);
  11. xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded" );
  12. xhr.send("GPX="+gpx);
  13. }
 

Je récupère dans ma variable javascript du code javascript généré par ajax.php. Mais lorsque je souhaite exécuter le code celui-ci n'est pas interprété et se comporte comme si c'était du simple texte. La preuve : lorsque je copie/colle le contenu de la variable javascript celui-ci est alors interprétable.

 

Si je n'ai pas été clair n'hésitez pas à me le faire comprendre.

 

Merci pour votre aide.

 


Edit : Pour simplifier l'énoncé de mon problème, une expérience toute bête :

 
Code :
  1. <script type="text/javascript">
  2. var data="new GLatLng(44.131495150, 0.335766823),new GLatLng(44.131733018, 0.336476457),new GLatLng(44.131898035, 0.336892086)";
  3. var poly1 = new GPolyline([data], "#ff0000", 2.5, 0.5, polyOptions);
  4. </script>


Ce script est censé déssiner une trace GPS sur une carte. Mais il ne marche pas.

 
Code :
  1. <script type="text/javascript">
  2. var data=[new GLatLng(44.131495150, 0.335766823),new GLatLng(44.131733018, 0.336476457),new GLatLng(44.131898035, 0.336892086)];
  3. var poly1 = new GPolyline(data, "#ff0000", 2.5, 0.5, polyOptions);
  4. </script>
 

Par contre celui-là marche ...

 


En espérant que cela vous a éclairci la chose ..


Message édité par Magg27 le 10-02-2011 à 14:22:47
Reply

Marsh Posté le 10-02-2011 à 14:05:01   

Reply

Marsh Posté le 10-02-2011 à 16:21:46    

Bonjour,
 
Le code du haut est un appel classique à Ajax.
Mais il n'est pas très clair

Citation :

var javascript=xhr.responseText;
data(javascript);


Vous avez choisi des noms très étranges pour vos variables et vos fonctions.
Il est assez inhabituel de nommer une variable javascript. Vous ne pourriez pas l'appeler ma_variable, par exemple ?
Il est aussi assez inhabituel de nommer une fonction data. Vous ne pourriez pas l'appeler ma_fonction, par exemple ?
 
Pour débugguer, il faudrait savoir ce que contient votre variable "javascript", et ce que contient votre fonction "data".
Sans cela, on ne peut faire que de la voyance ou de la divination.
 
Dans l'exemple du bas, la bonne syntaxe est en effet de pas mettre de crochets autour de data.
D'ailleurs, pourquoi vouloir mettre des crochets, ce n'est pas l'indice d'un tableau ?

Reply

Marsh Posté le 10-02-2011 à 17:05:18    

Salut et merci pour ta réponse.

 


billgatesanonym a écrit :


Vous avez choisi des noms très étranges pour vos variables et vos fonctions.

 

En réalité je n'ai pas utilisé ces noms là. C'est juste pour illustrer l'exemple : la variable javascript contient du javascript et la fonction data gère les données renvoyées.

 
billgatesanonym a écrit :


D'ailleurs, pourquoi vouloir mettre des crochets, ce n'est pas l'indice d'un tableau ?

 

C'est pour rassembler un ensemble de commandes.

 

Bon bref, j'ai trouvé la solution tout seul : utiliser la fonction eval() qui permet d'évaluer et d'exécuter le code javascript contenu dans la chaîne.

 

Je m'explique :

 
Code :
  1. function displaytrace(gpx)
  2. {
  3. var xhr = getXMLHttpRequest();
  4. xhr.onreadystatechange = function() {
  5.  if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
  6.   var voll=xhr.responseText;
  7.   data(voll);
  8.  }
  9. };
  10. xhr.open("POST", "ajax.php", true);
  11. xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded" );
  12. xhr.send("Trace_GPX="+gpx);
  13. }
 

Ici on envoie un nom de fichier XML (il s'agit d'un fichier .gpx) à ajax.php. Celui-ci décortique le XML et récupère les informations souhaitées pour ensuite les assembler dans une commande javascript que voici :

 
Code :
  1. new GPolyline([new GLatLng(coord1_lat,coord1_lon),new GLatLng(coord2_lat,coord2_lon), et ainsi de suite], #ff0000, 2.5, 0.5, {geodesic: true})
 

A noter ici l'utilité des crochets.

 

Une fois la commande assemblée, celle-ci est récupérée par la variable voll qui devient paramètre de la fonction data.
A ce moment, la variable voll est une chaîne de caractère contenant ma commande javascript.
Il est alors maintenant facile de l'utiliser avec eval() :

 
Code :
  1. function data(voll)
  2. {
  3. ..................
  4. ..................
  5. ..................
  6. var poly1 = eval(voll); //ici
  7. map.addOverlay(poly1);
 

Si cela peut aider quelqu'un qui se casse la tête avec l'API Google Map, c'est cool  :)

 

Merci A+


Message édité par Magg27 le 10-02-2011 à 17:09:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed