Basta saber se há algo embutido no Javascript que possa pegar um formulário e retornar os parâmetros de consulta, por exemplo: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
Eu estive pensando nisso por anos.
javascript
string
forms
get
Liam
fonte
fonte
Respostas:
Eu tentei procurar uma resposta para essa pergunta há algum tempo, mas acabei escrevendo minha própria função que extrai os valores do formulário.
não é perfeito, mas atende às minhas necessidades.
form_params retorna um mapeamento (chave -> valor) dos parâmetros. a entrada é o elemento do formulário (elemento DOM)
Ele não trata de campos que permitem seleção múltipla.
fonte
new Array()
para inicializar um dicionário. Mas, novamente, o código parece muito mais limpo do que algumas porcarias que eu escreveria nos dias de hoje!Atualização 2k20: use a solução de Josh com URLSearchParams.toString () .
Resposta antiga:
Sem jQuery
Para navegadores que não suportam a sintaxe da função de seta que requer ES5, altere o
.map...
linha parafonte
Se você estiver usando o jQuery, poderá consultar
jQuery.param()
http://api.jquery.com/jQuery.param/Exemplo:
fonte
$.param($('#myform').serializeArray())
.$('#myform').serialize()
jQuery !== JavaScript
jQuery.param()
aqui github.com/jquery/jquery/blob/master/src/serialize.js :)someStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
A API URLSearchParams está disponível em todos os navegadores modernos. Por exemplo:
fonte
params.append(key, value)
mais tarde adicionando novos parâmetros de pesquisa em cenários mais complicados.x=null&y=undefined
const url = new URL("https://stackoverflow.com")
), pode definir suas cadeias de consultaurl.search = new URLSearchParams({foo: "bar"})
ouurl.searchParams.append("foo", "bar")
Isso não responde diretamente à sua pergunta, mas aqui está uma função genérica que criará um URL que contém parâmetros de string de consulta. Os parâmetros (nomes e valores) são escapados com segurança para inclusão em uma URL.
fonte
new Array
pouco enquanto realmente a usa como objeto? o, OCom o jQuery, você pode fazer isso
$.param
fonte
ES2017 (ES8)
Fazendo uso de
Object.entries()
, que retorna uma matriz de[key, value]
pares de objetos . Por exemplo,{a: 1, b: 2}
pois retornaria[['a', 1], ['b', 2]]
. Não é suportado (e não será) apenas pelo IE.Código:
Exemplo:
Resultado:
fonte
Não, eu não acho que o JavaScript padrão tenha isso incorporado, mas o Prototype JS tem essa função (certamente a maioria das outras estruturas JS também, mas eu não as conheço), eles chamam de serializar .
Posso recomendar o Prototype JS, funciona bastante bem. A única desvantagem que eu realmente notei é o tamanho (algumas centenas de kb) e o escopo (muito código para ajax, dom etc.). Portanto, se você quer apenas um serializador de formulários, é um exagero e, estritamente falando, se você quer apenas a funcionalidade Ajax (que é principalmente o que eu usei), é um exagero. A menos que você seja cuidadoso, poderá achar que ele faz um pouco de "mágica" (como estender cada elemento dom que toca nas funções Prototype JS apenas para encontrar elementos), tornando-o lento em casos extremos.
fonte
querystring pode ajudar.
Então você pode
fonte
Se você não quiser usar uma biblioteca, isso deve cobrir a maioria dos tipos de elementos de formulário.
fonte
Na verdade, você não precisa de um formulário para fazer isso com o Prototype. Basta usar a função Object.toQueryString :
fonte
Hoje em dia, você pode fazer isso com
FormData
eURLSearchParams
sem a necessidade de repetir qualquer coisa.Os navegadores mais antigos precisarão de um polyfill.
fonte
Não tenho muita certeza, lembro-me de ter visto o jQuery até certo ponto, mas ele não lida com registros hierárquicos, muito menos de uma maneira amigável para php.
Uma coisa que eu tenho certeza é que, ao criar URLs e colar o produto no dom, não use cola para fazer isso, ou você estará se abrindo para um prático quebra de página.
Por exemplo, certos softwares de publicidade alinham a string da versão do que quer que seja executado no seu flash. Isso é bom quando sua string simples genérica adobra, mas, no entanto, é muito ingênua e explode em uma confusão embaraçosa para pessoas que instalaram o Gnash, já que a string da versão do gnash'es contém uma licença completa de direitos autorais da GPL, completa com URLs e tags <a href>. Usando isso em seu gerador de anunciantes de cola em seqüência, a página é aberta e o HTML desequilibrado é exibido no domínio.
A moral da história:
Não:
O Google precisa aprender esse truque. Eu tentei relatar o problema, eles parecem não se importar.
fonte
Como Stein diz, você pode usar a biblioteca javascript prototype em http://www.prototypejs.org . Inclua o JS e é muito simples então,
$('formName').serialize()
retornará o que você quer!fonte
Para aqueles de nós que preferem o jQuery, você usaria o plug-in de formulário: http://plugins.jquery.com/project/form , que contém um método formSerialize.
fonte
Pode ser um pouco redundante, mas a maneira mais limpa que encontrei, baseada em algumas das respostas aqui:
Fonte
fonte
Essas respostas são muito úteis, mas quero adicionar outra resposta, que pode ajudá-lo a criar um URL completo. Isso pode ajudar você concat de base
url
,path
,hash
eparameters
.Você pode fazer o download via npm https://www.npmjs.com/package/build-url
Demo:
fonte
Eu sei que esta é uma resposta muito tarde, mas funciona muito bem ...
note: object.entries retornará chave, pares de valores
Espero que ajude alguém.
Feliz codificação ...
fonte
Provavelmente é tarde demais para responder à sua pergunta.
Eu tinha a mesma pergunta e não gostava de continuar anexando strings para criar um URL. Então, comecei a usar $ .param como explicado pela techhouse .
Encontrei também uma biblioteca URI.js que cria os URLs facilmente para você. Há vários exemplos que o ajudarão a: Documentação URI.js .
Aqui está um deles:
fonte
fonte