Retroceder   Foros del Web > Programación para sitios web > Javascript

Respuesta
 
Herramientas Desplegado
Antiguo 21-abr-2007, 01:03   #1 (permalink)
Moderador
caricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy pronto
 
Avatar de caricatos
 
Fecha de Ingreso: noviembre-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 12.084
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
caricatos está desconectado   Responder Citando
Antiguo 21-abr-2007, 12:45   #2 (permalink)
Colaborador
Panino5001 llegará a ser famoso muy prontoPanino5001 llegará a ser famoso muy pronto
 
Avatar de Panino5001
 
Fecha de Ingreso: mayo-2004
Ubicación: Buenos Aires
Mensajes: 1.312
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-abr-2007 a las 12:51.
Panino5001 esta en línea ahora   Responder Citando
Antiguo 21-abr-2007, 16:23   #3 (permalink)
Moderador
caricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy pronto
 
Avatar de caricatos
 
Fecha de Ingreso: noviembre-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 12.084
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-abr-2007 a las 16:40. Razón: Retocar url
caricatos está desconectado   Responder Citando
Antiguo 21-abr-2007, 16:52   #4 (permalink)
Colaborador
Panino5001 llegará a ser famoso muy prontoPanino5001 llegará a ser famoso muy pronto
 
Avatar de Panino5001
 
Fecha de Ingreso: mayo-2004
Ubicación: Buenos Aires
Mensajes: 1.312
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.
Panino5001 esta en línea ahora   Responder Citando
Antiguo 21-abr-2007, 20:04   #5 (permalink)
Colaborador
derkenuke llegará a ser famoso muy prontoderkenuke llegará a ser famoso muy prontoderkenuke llegará a ser famoso muy pronto
 
Avatar de derkenuke
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.451
Re: Recibiendo array por url

Me gusta el script! Muy bien conseguido caricatos.
__________________
Inténtalo y búscalo siempre antes de preguntarlo
derkenuke esta en línea ahora   Responder Citando
Antiguo 22-abr-2007, 02:02   #6 (permalink)
Moderador
caricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy prontocaricatos llegará a ser famoso muy pronto
 
Avatar de caricatos
 
Fecha de Ingreso: noviembre-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 12.084
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
caricatos está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 14:51.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93