Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Javascript (http://www.forosdelweb.com/f13/)
-   -   Recibiendo array por url (http://www.forosdelweb.com/f13/recibiendo-array-por-url-483499/)

caricatos 21/04/2007 01:03

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 :arriba:

Panino5001 21/04/2007 12:45

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.

caricatos 21/04/2007 16:23

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

Panino5001 21/04/2007 16:52

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.

derkenuke 21/04/2007 20:04

Re: Recibiendo array por url
 
Me gusta el script! Muy bien conseguido caricatos.

caricatos 22/04/2007 02:02

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 :arriba:

ricci00 22/01/2010 14:00

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

zerokilled 22/01/2010 14:36

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 zona horaria es GMT -6. Ahora son las 07:54.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.