A veces en nuestras aplicaciones web introducimos mucho código JavaScript que podríamos extraer a un fichero externo .js y mejorar nuestro código en varios factores como organización, depuración, reutilización, etc. Sin embargo, a menudo este JavaScript no lo podemos externalizar porque intercalamos en él programación en lenguaje servidor (en nuestro caso PHP, aunque como siempre cualquiera vale) para dar valor a algunas variables, dar nombres a variables, etc. Por ejemplo:
<script type=’text/javascript’> alert('<?=$usuario->nombre;?>'); </script>
Lo dicho: si quisiéramos incluir ese código en un .js externo tenemos el problema de cómo no perder el valor que nos proporcionará el PHP en el momento de ejecutarse en servidor.
En realidad, existe una solución muy simple: en vez de cargar un .js cargar un PHP pasándole los parametros y que éste genere código JavaScript:
<script src='generador_javascript.php?nombre=Pedro'></script>
Pero esto no es ideal, ya que nos obliga a generar código desde PHP y sería mejor tener un archivo .js para reutilizarlo a placer y poder localizar futuros errores fácilmente. Lo que queremos es pasarle parámetros al fichero externo JavaScript utilizando el formato que se utiliza en la web para las Query String:
<script type='text/javascript' src='externo.js?par1=valor1&par2=valor2'> </script>
Lo cual plantea la dificultad de cómo recuperar esos valores. En lenguaje JavaScript, ¿existe algún equivalente al $_GET de PHP? La respuesta es no pero sí, aunque no tenemos forma de recoger estos parámetros, siendo astutos podemos utilizar el DOM para acceder a los valores desde el source (src) del tag <script> que carga el archivo Javascript. Para ello lo más sencillo es ponerle un identificador al tag <script>, por ejemplo:
<script type='text/javascript' id='identificador_js' src='externo.js?nombre=<?=$usuario->nombre; ?>' ></script>
Y para recoger los parametros en el .js externo, utilizamos una expresión regular para separar los valores en pares nombre+valor:
//recuperamos la query string var qs = document.getElementById("identificador_js").src.match(/\w+=\w+/g); //array para almacenar las variables var _GET= {}; var t,i = qs.length; while (i--) { //t[0] nombre del parametro y t[1] su valor t = qs[i].split("="); //opción 1: a modo de PHP _GET[t[0]] = t[1]; //opción2: variables con el mismo nombre usando eval eval('var '+t[0]+'="'+t[1]+'";'); } //mostrará el nombre 2 veces alert(_GET['nombre'] + " " + nombre);
Hola como estas?
disculpa que te moleste pero estoy haciendo algo parecido a tu ejemplo y no consigo que me ande.
Desde un Servlet donde lleno una variable de session (cli) luego llamo a mi JSP donde ademas de tener todo el codigo tengo las siguientes partes.
.
.
.
.
Go
Y desde el script tengo
var valor = document.getElementById(«cli»);
Ahora cuando realizo alert con la variable valor me dice «[object]»
Tenes una idea de lo que puedo estar haciendo mal?
cualquier informacion se agradecera.
desde ya muchas gracias.
Perdon donde esta el GO va lo siguiente
Go
gracias.
Hola Lucas,
Continúo sin ver lo del GO… No te puedo ayudar mucho, pero si te devuelve un [Object] averigua que tipo de objecto es e intenta extraer su información.
Por otro lado en el post lo que intentamos es que mediante els src del intentamos construir una querystring, y con una expresión regular extraemos los valor String de la querystring…
Un saludo.
Esto es bastante complejo. Puedes usar getAttribute para tomar el valor de un atributo inventado en la llamada a tu .js y colocar el php en dicho atributo,
por ejemplo:
<script id="miid" pase="» src=»el.js»>
En el.js:
var locojo=document.getElementById(‘miid’);
var esmio=locojo.getAttribute(‘pase’);
Con esto es suficiente….
Tienes un blog muy chulo…
PROBLEMA:
necesito pasar tres parametros de una variable al documento .js que tengo y solo consigo que pase uno.
CONTEXTO DEL PROBLEMA:
estoy concatenando al documento .js una variable llamada «nombre» la cual almacena a su vez tres parametros de una variable en PHP
EJ:
<script type="text/javascript"
id="identificador_js"
src="assets/js/js.js?nombre=» >
y solo recibo uno y los otros dos quedan fuera que debo hacer para conseguir pasar los tres parametros.
hice lo que propones y no funciona, no sale el alert