Me pregunto si hay algo incorporado en Javascript que pueda tomar un formulario y devolver los parámetros de consulta, por ejemplo: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
Me he estado preguntando esto por años.
javascript
string
forms
get
Liam
fuente
fuente
Respuestas:
Intenté buscar una respuesta a esta pregunta hace algún tiempo, pero terminé escribiendo mi propia función que extrae los valores del formulario.
No es perfecto pero se ajusta a mis necesidades.
form_params devuelve una asignación (clave -> valor) de los parámetros. la entrada es el elemento de formulario (elemento DOM)
No maneja campos que permiten la selección múltiple.
fuente
new Array()
para inicializar un diccionario. Pero, de nuevo, ¡el código se ve mucho más limpio que algunas de las tonterías que escribiría en estos días!Actualización 2k20: use la solución de Josh con URLSearchParams.toString () .
Vieja respuesta:
Sin jQuery
Para los navegadores que no admiten la sintaxis de la función de flecha que requiere ES5, cambie la
.map...
línea afuente
Si está utilizando jQuery, puede consultar
jQuery.param()
http://api.jquery.com/jQuery.param/Ejemplo:
fuente
$.param($('#myform').serializeArray())
.$('#myform').serialize()
jQuery !== JavaScript
jQuery.param()
aquí github.com/jquery/jquery/blob/master/src/serialize.js :)someStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
La API URLSearchParams está disponible en todos los navegadores modernos. Por ejemplo:
fuente
params.append(key, value)
más tarde para agregar nuevos parámetros de búsqueda en escenarios más complicados.x=null&y=undefined
const url = new URL("https://stackoverflow.com")
), puede configurar sus cadenas de consultaurl.search = new URLSearchParams({foo: "bar"})
ourl.searchParams.append("foo", "bar")
Esto no responde directamente a su pregunta, pero aquí hay una función genérica que creará una URL que contiene parámetros de cadena de consulta. Los parámetros (nombres y valores) se escapan de forma segura para su inclusión en una URL.
fuente
new Array
tiempo mientras realmente la usa como un objeto? o, OCon jQuery puedes hacer esto
$.param
fuente
ES2017 (ES8)
Haciendo uso de
Object.entries()
, que devuelve una matriz de[key, value]
pares de objetos . Por ejemplo, porque{a: 1, b: 2}
volvería[['a', 1], ['b', 2]]
. No es compatible (y no será) solo por IE.Código:
Ejemplo:
Resultado:
fuente
No, no creo que JavaScript estándar tenga eso incorporado, pero Prototype JS tiene esa función (seguramente la mayoría de los otros frameworks JS también lo tienen, pero no los conozco), lo llaman serializar .
Puedo recomendar Prototype JS, funciona bastante bien. El único inconveniente que realmente he notado es su tamaño (unos pocos cientos de kb) y su alcance (mucho código para ajax, dom, etc.). Por lo tanto, si solo desea un serializador de formularios, es excesivo, y estrictamente hablando, si solo desea su funcionalidad Ajax (que es principalmente para lo que lo usé), es excesivo. A menos que tenga cuidado, puede encontrar que hace demasiado "magia" (como extender cada elemento dom que toca con las funciones de Prototype JS solo para encontrar elementos), lo que lo hace lento en casos extremos.
fuente
querystring puede ayudar.
Así que puedes
fuente
Si no desea utilizar una biblioteca, esto debería cubrir la mayoría / todos los mismos tipos de elementos de formulario.
fuente
En realidad, no necesita un formulario para hacer esto con Prototype. Simplemente use la función Object.toQueryString :
fuente
Puede hacer eso hoy en día con
FormData
yURLSearchParams
sin la necesidad de repetir nada.Sin embargo, los navegadores más antiguos necesitarán un polyfill.
fuente
No estoy del todo seguro, recuerdo haber visto que jQuery lo hizo hasta cierto punto, pero no maneja los registros jerárquicos en absoluto, y mucho menos de una manera amigable con php.
Una cosa que sí sé con certeza es que al crear URL y pegar el producto en el dom, no solo use string-glue para hacerlo, o se abrirá a un práctico separador de páginas.
Por ejemplo, cierto software de publicidad integra la cadena de versión de lo que sea que ejecute su flash. Esto está bien cuando se trata de una cadena simple genérica de adobes, pero sin embargo, eso es muy ingenuo y explota en un lío vergonzoso para las personas que han instalado Gnash, ya que la cadena de versión de gnash contiene una licencia de copyright GPL completa, completa con URL y etiquetas <a href>. Al usar esto en el generador de anunciantes de pegamento de cadenas, se abre la página y aparece un HTML desequilibrado en el dom.
La moraleja de la historia:
No:
Google necesita aprender este truco. Traté de informar el problema, parece que no les importa.
fuente
Como dice Stein, puede utilizar la biblioteca prototipo de JavaScript de http://www.prototypejs.org . Incluya el JS y es muy simple, ¡
$('formName').serialize()
le devolverá lo que desea!fuente
Para aquellos de nosotros que preferimos jQuery, usaría el complemento de formulario: http://plugins.jquery.com/project/form , que contiene un método formSerialize.
fuente
Puede ser un poco redundante, pero la forma más limpia que encontré se basa en algunas de las respuestas aquí:
Fuente
fuente
Estas respuestas son muy útiles, pero quiero agregar otra respuesta, que puede ayudarlo a construir una URL completa. Esto le puede ayudar a concat de base
url
,path
,hash
yparameters
.Puede descargar a través de npm https://www.npmjs.com/package/build-url
Manifestación:
fuente
Sé que esta es una respuesta muy tardía pero funciona muy bien ...
nota: object.entries devolverá clave, pares de valores
Espero que ayude a alguien.
Feliz codificación ...
fuente
Probablemente sea demasiado tarde para responder a su pregunta.
Tenía la misma pregunta y no me gustaba seguir agregando cadenas para crear una URL. Entonces, comencé a usar $ .param como explicó Techhouse .
También encontré una biblioteca URI.js que crea las URL fácilmente para usted. Hay varios ejemplos que le ayudarán a: URI.js Documentación .
Aqui esta uno de ellos:
fuente
fuente