Ir al contenido principal

Leer parámetros desde la URL en JavaScript

Normalmente se suelen mandar parámetros desde un formulario en HTML / XHTML a un script escrito en un lenguaje de lado de servidor (JSP, PHP, ASP, ...), pero en alguna ocasión tendremos que llamar a un HTML / XHTML pasándole parámetros por URL (es decir, los parámetros son enviados usando el método GET).

En JavaScript podemos recurrir al objeto del navegador location y a su método search. Si una URL con parámetros tiene la forma:

http://elbitcampeador.wordpress.com?parametro1=valor1&parametro2=valor2

Para esta URL, el método location.search devuelve la cadena:

?parametro1=valor1&parametro2=valor2

Donde cada parámetro está separado por el caracter &, y para cada párametro se usa el carácter = para separar el nombre del valor.

A continuación pongo un ejemplo completo de lectura de parámetros desde URL usando JavaScript, y usar dos parámetros en concreto (uno llamado ancho y otro alto) para hacer un recuadro con esas dimensiones.

index.html

[sourcecode language="html"]


Leer parámetros desde JavaScript
<script type="text/javascript" src="script.js"></script>


La URL es:
El valor del parámetro ANCHO es:
El valor del parámetro ALTO es:


[/sourcecode]

script.js

[sourcecode language="javascript"]
function Init(){
var url = String(window.location.href);
var params = String(window.location.search);
var aux1 = new Array();
var aux2 = new Array();
var cont = 0;
var tot = 0;

//si hay parametros
if (params.length > 0){
//eliminamos el primer caracter '?'
params = params.substr(1);

//insertamos en un array las parejas nombre=valor
aux1 = params.split("&");
tot = aux1.length;
for (cont = 0; cont < tot; cont++){
//separo el nombre del valor
aux2 = aux1[cont].split("=");

//trabajo con cada parámetro
if (aux2[0].toLowerCase() == "ancho"){
document.getElementById("ancho").innerHTML = aux2[1];
document.getElementById("cuadro").style.width = aux2[1];
}
else if (aux2[0].toLowerCase() == "alto"){
document.getElementById("alto").innerHTML = aux2[1];
document.getElementById("cuadro").style.height = aux2[1];
}

}

}
else{
alert("No hay parámetros en la URL");
}

document.getElementById("url").innerHTML = url;
}
[/sourcecode]

Comentarios

  1. Despues de muchas pruebas no consegui que funcionara con javascript, lo he hecho al final con php que es muchisimo mas facil por lo que he visto. Solo con añadir donde queramos de nuestro codigo sale andando sin mayores problems!!

    ResponderEliminar
  2. Esta bien esto...

    lo que se come despues de añadir es php echo $_GET['ancho'];
    con sus correspondientes <? y al contrario al final obviamente.

    ResponderEliminar
  3. A mi tampoco me funcionaba pero reemplacé el
    por y anduvo perfecto.
    Después de usar ASP/JavaScript/MySQL ahora me siento perdida sin mi Request.QueryString !!! Gracias por el código !

    ResponderEliminar
  4. Lo siento, no salio el texto completo ... lo que reemplacé es el BODY por BODY ONLOAD="Init();"

    ResponderEliminar
  5. Gracias, funcionó perfectamente

    ResponderEliminar
  6. ¡Funciona! ¡Gracias.!
    Justo lo que necesitaba para no tener que utilizar PHP para evaluar los parametros recibidos.
    Obs.
    "index.js" != "script.js"

    ResponderEliminar
  7. ¡Gracias por la observación! ... ya está corregido :)

    ResponderEliminar
  8. capo!!! funciona a la perfeccion GRACIAS!!!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Cosmic Supremacy : Juego 4X online, gratuito y multijugador basado en conquistas espaciales

  Llevaba bastante tiempo buscando un juego de estrategia en el espacio, multijugador , y que fuera por turnos . Un requisito que siempre tuve es que fuera fácil aprenderlo, y tuviera suficiente ayuda o tutoriales. Creo que lo he encontrado, se llama Cosmic Supremacy , y es gratis . Os dejo aquí información traducida desde su web oficial por si os animáis :) ¿Qué es Cosmic Supremacy? Cosmic Supremacy es un juego gratuito de estrategia espacial multijugador masivo basado en ticks/turnos con una interfaz 3D 'Galaxy View'. Compartes una galaxia con cientos de jugadores, cada uno con su propia civilización alienígena. Algunos de ellos pueden llegar a ser tus enemigos, otros podrían ser tus aliados. Necesitas explorar la galaxia que te rodea, descubrir nuevos sistemas solares, colonizar nuevos planetas y expandir tu imperio. Puedes diseñar todas las naves de tu flota e investigar nuevas tecnologías avanzadas para poder construir naves más rápidas y fuertes que te darán la ventaja ...

Hacer una pausa en un fichero por lotes batch (bat o cmd)

En consola de Windows (antiguamente Ms-Dos) desde siempre se ha podido hacer una pausa, esperando confirmación del usuario. El comando en cuestión es: pause Si escribimos pause en nuestra consola veremos que la consola se queda pausada hasta que pulsamos una tecla. Esto es útil en ficheros batch (ya sean .bat o .cmd) para hacer pausas controladas entre distintos comandos, a la espera que el usuario pulse alguna tecla para continua. Pero, ¿qué ocurre si queremos una pausa de cierto número de segundos y luego continúe el proceso automáticamente ? No hay ningún comando que lo haga, pero haciendo el siguiente "truco" (hace un ping a una URL especificando el número de segundos como timeout) lo podremos conseguir ping -n 10 localhost > null Simplemente cambiar el 10 por el número de segundos que queráis, y ya tendréis en consola (o msdos) una pausa de N segundos, y luego el proceso continuará automáticamente.  

Cómo colorear y añadir información de GIT a la consola (shell) de linux al conectarse remótamente por SSH

Si os pasa que tenéis vuestro terminal de Linux coloreado y veis información de GIT en el prompt , y al conectarse en remoto vía SSH al mismo servidor ya no lo veis, lo que necesitáis hacer es crear, o editar, el siguiente fichero en vuestro directorio home ~/.bash_profile , y añadir la siguiente información: [sourcecode] # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color) color_prompt=yes;; esac # uncomment for a colored prompt, if the terminal has the capability; turned # off by default to not distract the user: the focus in a terminal window # should be on the output of commands, not on the prompt force_color_prompt=yes if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then # We have color support; assume it's compliant with Ecma-48 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such # a case would te...