Foros del Web » Programando para Internet » Javascript »

Recibiendo array por url

Estas en el tema de Recibiendo array por url en el foro de Javascript en Foros del Web. Hola: Acabo de terminar un script para recibir las variables desde javascript enviadas por el método get desde un formulario o desde url's del tipo ...
  #1 (permalink)  
Antiguo 21/04/2007, 01:03
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Recibiendo array por url

Hola:

Acabo de terminar un script para recibir las variables desde javascript enviadas por el método get desde un formulario o desde url's del tipo pagina.html?var1=dato1&var2=dato2.

La cuestión es que cuando se envía un array los sistemas básicos solo dejan el último de los valores que recibe de cada variable, debido a que se asignan valores tantas veces como longitud tenga ese array.

El código es:

Código:
function receptor()	{
	var entradas = new Object();

	function allanar()	{
		for (i in entradas)
			window[i] = (entradas[i]["esArray"] == undefined) ? entradas[i] : entradas[i].datos; 
	}

	function aparejar(dato) {
		if (dato.length > 1)
			if (entradas[dato[0]] == undefined)
				entradas[dato[0]] = dato[1];
			else	{
				if (entradas[dato[0]]["esArray"] == undefined) {
					_dato = entradas[dato[0]];
					entradas[dato[0]] = new Object();
					entradas[dato[0]].esArray = true;
					entradas[dato[0]].datos = new Array();
					entradas[dato[0]].datos[0] = _dato;
				}
				entradas[dato[0]].datos[entradas[dato[0]].datos.length] = dato[1];
			}
	}

	if (location.href.indexOf("?") == -1) return;
	params = unescape(location.search.substr(1)).split("&");
	for (var i = 0, total = params.length; i < total; i ++) aparejar(params[i].split("="));
	allanar();
}
Un ejemplo se puede ver aquí: http://www.caricatos.net/articulos/r...nocido&vale=si

Si alguién sabe como mejorarlo, me gustaría saberlo.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 21/04/2007, 12:45
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: Recibiendo array por url

Hola, Pepe!
Yo prefiero serializar el array en formato json:
Un ejemplo:
Código PHP:
<?php
if(!isset($_GET['variable'])){
?>
<a href="<?php echo basename($_SERVER['PHP_SELF']) ?>?variable=algo&arr={0:'hola',1:'que',2:'tal!'}&otra=esta es otra">enviar</a>
<?php
exit;
}
?>
<script>
QUERY_STRING=unescape(location.search.substr(1));
data=QUERY_STRING.split('&');
for(i in data){
tmp=data[i].split('=');
window[tmp[0]]=tmp[1].indexOf('{')==-1 && tmp[1].indexOf(':')==-1 ? tmp[1] :eval("("+tmp[1]+")");
}
alert(arr[0])
alert(otra)
alert(variable)
</script>
El código php no tiene importancia, es sólo para que quede todo en la misma página.

Última edición por Panino5001; 21/04/2007 a las 12:51
  #3 (permalink)  
Antiguo 21/04/2007, 16:23
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Recibiendo array por url

Hola Andrés:

Parece que la url que creas no es igual a las que se crean con un formulario y el método get.
Verás, si no me equivoco los arrays se forman repitiendo los identificadores de variables.
La url debería ser así:
$PHP_SELF."?variable=algo&arr=hola&arr=que&arr=tal !&otra=esta%20es%20otra"

Y el comportamiento con la url así es distinto...

De todos modos es un planteamiento que no se me había ocurrido.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 21/04/2007 a las 16:40 Razón: Retocar url
  #4 (permalink)  
Antiguo 21/04/2007, 16:52
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: Recibiendo array por url

Sí, es cierto... esto también es interesante, como algunos otros hilos que se vienen planteando. Últimamente me estoy enfocando bastante a JSON, debido a que el intercambio javascript/php se facilitó con la aparición de json_encode y json_decode en php 5, y su aparentemente mayor velocidad respecto de xml.
Pero tu sistema me gusta mucho también.
En cuanto al mío, no pude evitar el uso de eval, no sé si habrá manera en este caso.
  #5 (permalink)  
Antiguo 21/04/2007, 20:04
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años
Puntos: 45
Re: Recibiendo array por url

Me gusta el script! Muy bien conseguido caricatos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 22/04/2007, 02:02
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: Recibiendo array por url

Hola:

Gracias derkenuke, no sé si lo he mejorado un poco, pero al menos he conseguido poner unas líneas menos... me basé un poco en la idea de Andrés:

Código:
function receptor()	{
	var entrada = new Object();
	if (location.href.indexOf("?") == -1) return;
	params = location.search.substr(1).split("&");
	for (var i = 0, total = params.length; i < total; i ++)
		entrada[params[i].split("=")[0]] += " " + params[i].split("=")[1];
	for (i in entrada)	{
		actual = entrada[i].split(" ").slice(1);
		for (x = 0, total = actual.length; x < total; x ++)
			actual[x] = unescape(actual[x]);
			window[i] = (actual.length == 1) ? actual[0] : actual;
	}
}
Y mientras escribía se me ocurrió otra manera según el tipo de los datos ("undefined" cuando es la primera asignación, "string" después de la primera asignación y "object" el resto de los casos):

Código:
function receptor()	{
	var entrada = new Object();
	if (location.href.indexOf("?") == -1) return;
	params = location.search.substr(1).split("&");
	for (var i = 0, total = params.length; i < total; i ++)	{
		pareja = params[i].split("="); dato = unescape(pareja[1]);
		switch	(typeof(entrada[pareja[0]]))	{
			case "undefined": entrada[pareja[0]] = dato; break;
			case "object": entrada[pareja[0]][entrada[pareja[0]].length] = dato; break;
			case "string": temp = [entrada[pareja[0]], dato]; entrada[pareja[0]] = temp; break;
		}
	}
	for (i in entrada)	window[i] = entrada[i];
}
¿Cuál creen que es el mejor de los métodos...? ¿A alguien se le ocurre algo mejor?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 22/01/2010, 14:00
 
Fecha de Ingreso: enero-2010
Mensajes: 31
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Recibiendo array por url

hola caricatos tengo esta url

Código HTML:
Ver original
  1. hp?cantidad1=1&precio1=200.00&amonto1=200&cantidad2=3&precio2=200.00&amonto2=200&item=+5&x=46&y=7

tengo cantidad1,cantidad2 y asi sucesivamente...y debo imprimir el valor de cantidad en una celda ... como puedo hacer para recibir el valor de cantidad en un solo get??? algo asi como $_get['cantidad[]']; que creo q no se puede hacer... pero que otro metodo puedo usar ???puede ser en php o javascript...

tu imprimes el valor de la url como un array..

var saludo = ['Hola', 'amigo', 'desconocido'];
yo quiero imprimirlo como un dato ...

y supongo q todo eso dentro de un bucle
  #8 (permalink)  
Antiguo 22/01/2010, 14:36
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Recibiendo array por url

ricci00, si necesitas ayuda con el tema te recomiendo que abras uno nuevo y hagas referencia a este tema. lo mas seguro lo van a cerrar por antigüedad. por otro lado no comprendo bien tu duda. especificamente no comprendo cuando dices como puedo hacer para recibir el valor de cantidad en un solo get. ¿te refieres a tener un array similar a _GET en javascript? luego comentas,
Cita:
tu imprimes el valor de la url como un array..

var saludo = ['Hola', 'amigo', 'desconocido'];
yo quiero imprimirlo como un dato ...
¿a que te refieres como un dato? es decir, para ti, ¿que es un dato?

recuerda (por preferencia de la administracion) crear un nuevo tema para continuar la discusion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 01:28.