En este momento estás viendo Pasar variables por la url en Javascript

Pasar variables por la url en Javascript

Hace tiempo que llevo pensando en la forma de Pasar variables por la url en Javascript, como ya hemos visto se puede hacer en PHP de forma muy sencilla, pero javascript no tiene integrada esa funcionalidad.

Pero podemos crear una función que recoja las variables en un array desde la url y de ese modo podemos trabajar de forma muy similar a como se hace en PHP.

Está función sería la siguiente:

/**
* Funcion que captura las variables pasados por GET
* Devuelve un array de clave=>valor
*/
function getGET()
{
    // capturamos la url
    var loc = document.location.href;
    // si existe el interrogante
    if(loc.indexOf('?')>0)
    {
        // cogemos la parte de la url que hay despues del interrogante
        var getString = loc.split('?')[1];
        // obtenemos un array con cada clave=valor
        var GET = getString.split('&');
        var get = {};
        // recorremos todo el array de valores
        for(var i = 0, l = GET.length; i < l; i++){
            var tmp = GET[i].split('=');
            get[tmp[0]] = unescape(decodeURI(tmp[1]));
        }
        return get;
    }
}

De esta forma convertimos la parte que mantiene las variables en la url en un array clave=>valor.

Ahora lo que deberíamos de hacer es o bien recorrerlo para trabajar con el array o bien guardar los valores como si se tratase de PHP

window.onload = function()
{
    // Cogemos los valores pasados por get
    var valores=getGET();
    if(valores)
    {
    	//recogemos los valores que nos envia la URL en variables para trabajar con ellas
    	var nombre = valores['nombre'];
    	var edad = valores['edad'];
	// hacemos un bucle para pasar por cada indice del array de valores
        for(var index in valores)
        {
            document.write("clave: "+index+" - valor: "+valores[index]);
        }
        document.write('

<hr>


Te llamas '+ nombre);
        document.write(' Tu edad es '+ edad);
    }else{
        // no se ha recibido ningun parametro por GET
        document.write("No se ha recibido ningún parámetro");
    }
}



En este ejemplo lo único que tenemos que cambiar son los índices según deseemos y utilizar las variables como nos plazca, de hecho podemos verlo en funcionamiento de forma completa para la siguiente url:

recibir.html?nombre=Miguel&edad=37

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>

    /**
    * Funcion que captura las variables pasados por GET
    * Devuelve un array de clave=>valor
    */
    function getGET()
    {
        // capturamos la url
        var loc = document.location.href;
        // si existe el interrogante
        if(loc.indexOf('?')>0)
        {
            // cogemos la parte de la url que hay despues del interrogante
            var getString = loc.split('?')[1];
            // obtenemos un array con cada clave=valor
            var GET = getString.split('&');
            var get = {};
            // recorremos todo el array de valores
            for(var i = 0, l = GET.length; i < l; i++){
                var tmp = GET[i].split('=');
                get[tmp[0]] = unescape(decodeURI(tmp[1]));
            }
            return get;
        }
    }
    window.onload = function()
    {
        // Cogemos los valores pasados por get
        var valores=getGET();
        if(valores)
        {
        	//recogemos los valores que nos envia la URL en variables para trabajar 
                //con ellas
        	var nombre = valores['nombre'];
        	var edad = valores['edad'];
    	        // hacemos un bucle para pasar por cada indice del array de valores
            for(var index in valores)
            {
                document.write(" clave: "+index+" - valor: "+valores[index]);
            }
            document.write('
<hr>

 Te llamas '+ nombre);
            document.write(' Tu edad es '+ edad);
        }else{
            // no se ha recibido ningun parametro por GET
            document.write("No se ha recibido ningún parámetro");
        }
    }
    </script>
</body>
</html>

Aquí podemos ver cómo podemos capturar las variables y guardarlas dentro de nuestro script, considerando que los indices nombre y edad nos los da la url y deberíamos cambiarlos dependiendo del nombre que tengan en cada caso, pudiendo ser todos los que necesitemos.

Lo que si tenemos que tener en cuenta es que las variables que recogemos son siempre strings, por lo que si trabajamos con valores numéricos tenemos que convertir las variables en numericas.

edad = parseInt(edad);

De esta forma ya podemos trabajar también con números.

Espero que os haya servido y que os funcione en vuestros proyectos.

Esta entrada tiene 8 comentarios

  1. Gastón Dourrom

    Hola! Como estas? mi nombre es Gastón y estoy empezando con esto de javascript y me gustaria saber si me puedes dar una mano. te explico un poco de que va;
    estoy haciendo un sitio de inmobiliaria y el filtro busca estupendamente bien, ahora el tema es que no me figura en la url lo que yo filtro..
    necesito saber como hago para pasar los elementos que se seleccionaron en el filtro a la URL.

    lo que tengo en la URL ahora:
    inmobiliariaD.com

    lo que quiero luego de seleccionado los filtros:
    inmobiliariaD.com?tipoDeOperacion=venta&dormitorios=2&banos=2

    desde ya muchas gracias! 😀

    1. Miguel Angel

      Hola, pues para crear la url bien lo haces usando GET get en el formulario, o bien por medio de una funcion en js donde recojas las variables y vrees la url o pasas las opciones por pkp ya sea usando ajax o de forma directa…
      Entiendo q lo que encesitas es que el usuario marque unas opciones y se genere una url que al enviar el formulario se envie a un archivo que recoja las opciones, no?

      1. Gastón Dourrom

        hola! muchas gracias por tu respuesta…
        pkp o ajax es medio chino, no se ni que es eso… como indicaba antes estoy aprendiendo y solo debo usar JavaScript.

        Lo que yo necesito es que cuando el usuario seleccione los filtros y de en aplicar.. en la url se muestran esos filtros aplicados, tengo una funcion que recorre todos los filtros y evalúa si esta seleccionado o no y tambien ya muestra en pantalla las propiedades que cumplen con esos valores…
        hay una forma de pasarle el resultado que da esa funciona a la url?

        no estoy usando GET en el formulario porque el profesor me dijo que no lo hiciera ya que es en local y no es necesario…

        1. Miguel Angel

          tengo algo que te puede servir, escribeme un mail y te lo mando… (y ya que estamos darle a algunos anuncios de la web no estaria mal jajajaja)

Deja una respuesta

Responsable » Miguel Ángel López Torralba
Finalidad » Contactar conmigo y enviarte mi contenido.
Legitimación » Tu consentimiento.
Destinatario » MailChimp, mi proveedor de email marketing, que está acogido al acuerdo de seguridad EU-US Privacy.
Derechos » Acceder, rectificar, limitar o suprimir tus datos cuando quieras.