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.  

Fraude SEUR SMS

Quería comentar y advertir de los cada vez más casos de fraude vía SMS que se están sufriendo relativos a entregas de paquetes. Cada vez es más normal que tengamos varios pedidos pendientes de entrega y no nos acordemos de todos de cabeza, y si recibimos un SMS relacionado con algún pedido, pinchemos en el enlace, ¡mucho cuidado! Hoy mismo he recibido este mensaje SMS en mi móvil: SEUR: envio 7770722 de LETMEKNOW no entregado por ausencia en domicilio. Programe nueva entrega en <página web> No especifico la URL de la página web que venía en el SMS por seguridad que nadie clique ahí. Desde el princiio esto me sonó a fraude más que a equivocación, primero porque no esperaba ningún paquete, segundo porque estaba en casa cuando recibí el SMS, y finalmente la página web me resultó sospechosa, ni siquiera era https... Al recibir el SMS busqué el número de teléfono desde el que me lo habían enviado, no obtuve ninguna información. Después busqué "SMS LETMEKNOW" y llegue a un ar...