2011-02-10 7 views
7

Tengo una serie de parámetros que se pasan a una página por variables de URL. La URL se ve algo así como:?Obtener variables de matriz de URL en javascript/jquery

file.aspx categoría [] = 1 & categoría [] = 7 & categoría [] = 3 & id = 8AZ

El uso de la extensión de jQuery getUrlParam puedo obtener las variables de URL muy fácilmente, pero en lugar de devolver la categoría como una matriz (que es lo que quiero) se devuelve como nulo.

¿Hay alguna manera de leerlos en una matriz de JavaScript?

Respuesta

1

¿No debería ser: file.aspx?category=1&category=7&category=3

+0

Acutalmente sí, con getUrlParam que devuelve una matriz como la necesitaba. – Hibiscus

+0

hmm.,. ¿por qué lo elegiste como la respuesta correcta? – arnorhs

+0

Porque, como acaba de decir ... "en realidad sí, [mi sugerencia] sí" hace lo que necesitaba. –

3

anteriormente señalé a esta pregunta: Get QueryString values with jQuery - sino como @Crescent fresco señaló, estos ejemplos no se ocupan de las matrices en la cadena de consulta (y, además, son un poco lento Creo

. Así cocinaba mi versión de esta función:

function getQueryString() { 
    var ret = {}; 
    var parts = (document.location.toString().split('?')[1]).split('&'); 
    for (var i = 0; i < parts.length; i++) { 

     var p = parts[i].split('='); 
     // so strings will be correctly parsed: 
     p[1] = decodeURIComponent(p[1].replace(/\+/g, " ")); 

     if (p[0].search(/\[\]/) >= 0) { // then it's an array 
      p[0] = p[0].replace('[]',''); 

      if (typeof ret[p[0]] != 'object') ret[p[0]] = []; 
      ret[p[0]].push(p[1]); 
     } else { 
      ret[p[0]] = p[1]; 
     } 
    } 
    return ret; 
} 

Pero hay advertencias Sólo funcionará en una cadena de consulta formado correctamente - no hay detección de errores Además, no funciona en numerada/matrices indexadas... . Es cuando su matriz se define en la cadena de consulta como:

?category[3]=1&category[4]=7&category[20]=3&id=8az 

Sería trivial agregar a la búsqueda .search() una expresión regular para encontrar eso también, pero no soy el mejor experto en expresiones regulares ... ¿Alguien tiene ideas?

+1

No hay una única respuesta va a hacer lo que el PO está pidiendo (es decir, la detección por red en la cadena de consulta). –

+0

Tienes razón. No me di cuenta, acabo de ver una función complicada y pensé que algo complicado debía hacerlo bien ... pero no fue así. Agregué mi versión. – arnorhs

+0

¿por qué no simplemente publicarlo en lugar de obtener? – kjy112

Cuestiones relacionadas