Dada la siguiente forma:
<form>
<input name="foo" value="bar">
<input name="hello" value="hello world">
</form>
Puedo usar la $.param( .. )
construcción para serializar el formulario:
$.param( $('form input') )
=> foo=bar&hello=hello+world
¿Cómo puedo deserializar la cadena anterior con JavaScript y recuperar un hash?
Por ejemplo,
$.magicFunction("foo=bar&hello=hello+world")
=> {'foo' : 'bar', 'hello' : 'hello world'}
Referencia: jQuery.param( obj )
.
javascript
jquery
seb
fuente
fuente
+
. ¡Ahora los reemplaza a todos!QueryString
. Hice uno pero no acepta parámetros, solo se lee desde window.location.search. Recuerdo a otros que aceptan parámetros ...Respuestas:
Debe usar la función deparam de jQuery BBQ . Está bien probado y documentado.
fuente
Esta es una versión ligeramente modificada de una función que escribí hace un tiempo para hacer algo similar.
fuente
¿Qué tal este breve enfoque funcional?
Ejemplo:
fuente
field[][]=a&field[0][]=b&field[0][]=c
se procesa comoObject { field[][]: "a", field[0][]: "c" }
donde debería estarresultobject.field[0] = Array [ "a", "b", "c" ]
. Este es el comportamiento esperado de PHP. La solución de @ JackyLi se encarga de eso.Mi respuesta:
fuente
JSON.stringify(geturlargs('fld[2][]=2&fld[][]=3&fld[3][]=4&fld[]=bb&fld[]=cc').fld)
obtengo{"2":["2"],"3":["4"],"":"cc"}
y no[null,null,[2],[3,4],"bb","cc"]
lo que hubiera esperado (esto es lo que PHP me daría).Estoy usando la respuesta de David Dorward, y me di cuenta de que no se comporta como PHP o Ruby on Rails cómo analizan los parámetros:
1) una variable es solo una matriz si termina con
[]
, por ejemplo?choice[]=1&choice[]=12
, no cuando es?a=1&a=2
2) cuando existen múltiples parámetros con el mismo nombre, los posteriores reemplazan a los anteriores, como en los servidores PHP (Ruby on Rails mantiene el primero e ignora los posteriores), como
?a=1&b=2&a=3
Modificando la versión de David, tengo:
que se prueba bastante a fondo.
fuente
hash[k.substr(0, k.length-2)] = [v];
yhash[k.substr(0, k.length-2)].push(v);
Sé que este es un hilo viejo, pero ¿tal vez todavía tenga alguna relevancia?
Inspirado por la buena solución de Jacky Li, probé una ligera variación propia con el objetivo de ser capaz de manejar combinaciones arbitrarias de matrices y objetos como entrada. Miré cómo PHP lo habría hecho y traté de lograr algo "similar". Aquí está mi código:
Si se llama a la función sin el
str
argumento-asumiráwindow.location.search.slice(1)
como entrada.Algunos ejemplos:
resultados en
Mientras que la solución de Jacky Li produciría el contenedor externo
a
como un objeto simplegetargs()
mira el primer índice dado para cualquier nivel para determinar si este nivel será un objeto (índice no numérico) o una matriz (numérica o vacía), lo que da como resultado la salida como se muestra en el listado anterior (no. 6).Si el objeto actual es una matriz, entonces
null
s se inserta donde sea necesario para representar posiciones vacías. Las matrices siempre están numeradas consecutivamente y basadas en 0).Tenga en cuenta que en el ejemplo no. 8 el "autoincremento" para índices vacíos todavía funciona, aunque ahora estemos tratando con un objeto y no con una matriz.
Hasta donde lo he probado, mi
getargs()
comportamiento se comporta de manera casi idéntica al gran$.deparam()
complemento jQuery de Chriss Roger mencionado en la respuesta aceptada. La principal diferencia es que segetargs
ejecuta sin jQuery y que aumenta automáticamente en los objetos, mientras$.deparam()
que no lo hará:resultados en
En
$.deparam()
el índice[]
se interpreta como unundefined
índice numérico autoincrementado en lugar de uno.fuente
o[k]=isNaN(idx[0])?{}:[];
con la intención de crear una matriz, cada vez que encuentro un índice numérico como el primero dado para un nuevo objeto. De lo contrario, haré un objeto genérico. Depende de usted modificar esa parte del código para que se adapte mejor a sus necesidades. I. e. algo asío[k]={}
debería hacer el truco.Aquí le mostramos cómo podría crear una nueva función jQuery:
fuente
true
para que uno pueda comprobarif (params.redirect)
o similar. Si desea diferenciar entretrue
y otro valor, lo usaríaif (params.redirect === true)
. Unnull
valor no ayudaría de ninguna manera que se me ocurra. La razón por la que no lo hice como David es porque valoro la consistencia sobre la flexibilidad. Con su método, tengo que verificar si el valor es una cadena o una matriz para usar su valor. En mi opinión, siempre debe ser una cadena (eltrue
valor se convierte en'true'
lo que creo que está bien), o siempre debe ser una matriz. Elegí la cuerda./abc?delete
entonces, esperaría que haya una entrada paradelete
. No veo cómo eso es diferente? Ni siquiera veo cómo puede preferir el otro código por este motivo, porque ese código establecerá el valor de la cadena'undefined'
que no es mejor. Y en cuanto a los valores múltiples, es un caso de simplicidad versus flexibilidad. Raramente veo el uso de múltiples valores en las cadenas de consulta, pero si los desea, siempre devuelva una matriz con valores 1+. Nunca mezcle el tipo de retorno; entonces tendrá que pasar tiempo para depurar porque lo que generalmente era una cadena de repente podría ser una matriz.Gracias a él http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
Bastante fácil: D
fuente
?something=1¶m2=value2
en una matriz. ¿Qué quiere decir con "no funciona con cuadros de selección con múltiples opciones"?Aquí está mi implementación de JavaScript que utilizo en una página JScript ASP Classic del lado del servidor ( demo ):
fuente
utilizar este :
fuente
Se me ocurrió esta solución, que se comporta como la función .Net
HttpUtility.ParseQueryString
.En el resultado, los parámetros de la cadena de consulta se almacenan en propiedades como listas de valores, por lo que
qsObj["param"]
será lo mismo que llamarGetValues("param")
a .Net.Espero que te guste. No se requiere JQuery.
Aquí está cómo usarlo:
Para obtener una vista previa del resultado en la consola, escriba:
Salida:
fuente
Hay una hermosa línea en CSS-Tricks (fuente original de Nicholas Ortenzio ):
La parte realmente inteligente es cómo usa el
this
objeto de la función anónima , agregando un par clave / valor para cada una de las consultas en la cadena. Dicho esto, hay margen de mejora. Lo he modificado un poco a continuación, con los siguientes cambios:Se agregó manejo de cadenas vacías y entrada sin cadenas.
Se manejaron cadenas codificadas por URI (
%40
->@
, etc.).Se eliminó el uso predeterminado de
document.location.search
cuando la entrada estaba vacía.Cambió el nombre, lo hizo más legible, agregó comentarios.
fuente
Esta es una pregunta muy antigua, pero como he venido, otras personas pueden venir a esta publicación, y quiero actualizar un poco este tema. Hoy no es necesario crear soluciones personalizadas: hay una interfaz URLSearchParams .
La única limitación que conozco es que esta característica no es compatible con IE / Edge.
fuente
Esta es mi versión en Coffeescript. También funciona para url como
http://localhost:4567/index.html?hello=[%22world%22]&world=hello#/home
fuente
Aquí hay uno simple y compacto si solo desea obtener rápidamente los parámetros de una solicitud GET:
Se convierte
en un objeto como
fuente
Crea una representación serializada de una matriz u objeto (se puede usar como cadena de consulta de URL para solicitudes AJAX).
fuente
las respuestas podrían usar un poco de elegancia jQuery :
tenedor en https://gist.github.com/956897
fuente
Puede usar la función
.serializeArray()
( Enlace ) de jQuery. Esta función devuelve una matriz de par clave-valor. Ejemplo de resultado:fuente