Você conhece uma maneira rápida e simples de codificar um objeto Javascript em um string
que eu possa passar por umGET
solicitação?
Não jQuery
, não há outras estruturas - apenas Javascript :)
javascript
query-string
urlencode
napolux
fonte
fonte
URLSearchParams
Respostas:
como isso?
Edit: este também converte objetos recursivos (usando a notação php "array" para a string de consulta)
fonte
O jQuery tem uma função para isso;
jQuery.param()
se você já estiver usando, pode usar isso: http://api.jquery.com/jquery.param/exemplo:
str
agora contémwidth=1680&height=1050
fonte
var a = []; a[5] = 'foo'; jQuery.param({ parameters: a });
Resultados em"parameters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=foo"
. Que, embora correto, pode não ser o que você espera.Basta usar
URLSearchParams
Isso funciona em todos os navegadores atuaisfonte
let j = { m: 5, n: { k: 1 } }; new URLSearchParams(j).toString(); // result "m=5&n=%5Bobject+Object%5D"
stringify
os objetos aninhados antes de poderURLSearchParams
Edit: Eu gosto deste one-liner, mas aposto que seria uma resposta mais popular se correspondesse à resposta aceita semanticamente:
fonte
Object.keys(obj).map(k => k + '=' + encodeURIComponent(obj[k])).join('&')
Object.keys
está disponível somente no IE> = 9Object.keys(obj).map(k => `${k}=${encodeURIComponent(obj[k])}`).join('&')
Object.entries(obj).map(e => e.map(ee => encodeURIComponent(ee)).join('=')).join('&');
Aqui está um liner no ES6:
fonte
export?actions[]=finance,create,edit
quando deveria terexport?actions[]=finance&actions[]=create&actions[]=edit
como é o padrão terrível.actions[]
é notação PHP; O Django usa múltiploaction
(sem[]
sufixo); alguns outros ORM / CMS exigem listas separadas por vírgula, etc.Com o Node.js v6.6.3
Referência: https://nodejs.org/api/querystring.html
fonte
Eu sugiro usar a
URLSearchParams
interface:Ou passando o objeto de pesquisa para o construtor como este:
fonte
Uma pequena alteração à solução aceita pelo user187291:
A verificação de hasOwnProperty no objeto deixa JSLint / JSHint feliz e impede a serialização acidental de métodos do objeto ou de outras coisas, se o objeto não for um dicionário simples. Consulte o parágrafo em para instruções nesta página: http://javascript.crockford.com/code.html
fonte
Bem, todo mundo parece colocar sua frase aqui, então aqui vai a minha:
fonte
Você precisa enviar objetos arbitrários? Nesse caso, GET é uma péssima idéia, pois há limites para os comprimentos de URLs que os agentes do usuário e os servidores da web aceitarão. Minha sugestão seria criar uma matriz de pares nome-valor para enviar e, em seguida, criar uma string de consulta:
fonte
Construtor de consultas de estilo Rails / PHP
Este método converte um objeto Javascript em um
URI Query String
. Também lida com matrizes e objetos aninhados (naRails
/PHP
sintaxe):Exemplo de uso:
fonte
function
para excluirfalsy
valores (nulo, indefinido, NaN, '') ...use JSON.
dê uma olhada nesta pergunta para obter idéias sobre como implementar.
fonte
Aqui está a versão coffeescript da resposta aceita. Isso pode economizar tempo para alguém.
fonte
Aqui está uma versão concisa e recursiva com Object.entries . Ele lida com matrizes aninhadas arbitrariamente, mas não com objetos aninhados. Ele também remove elementos vazios:
Por exemplo:
fonte
Este pula valores nulos / indefinidos
fonte
No ES7, você pode escrever isso em uma linha:
fonte
Linha única para converter Objeto em String de Consulta, caso alguém precise dela novamente
fonte
Eu tenho uma solução mais simples que não usa nenhuma biblioteca de terceiros e já pode ser usada em qualquer navegador que tenha "Object.keys" (também conhecido como todos os navegadores modernos + borda + ou seja):
No ES5
No ES3
fonte
Se você deseja converter um objeto aninhado recursivamente e o objeto pode ou não conter matrizes (e as matrizes podem conter objetos ou matrizes, etc.), a solução fica um pouco mais complexa. Esta é a minha tentativa.
Também adicionei algumas opções para escolher se você deseja gravar para cada membro do objeto em que profundidade do objeto principal ele se encontra e para escolher se deseja adicionar um rótulo aos membros provenientes de matrizes convertidas.
Idealmente, você deve testar se o parâmetro thing realmente recebe um objeto ou matriz.
fonte
Além da solução aceita, isso funciona com objetos e matriz de objetos:
Também adicionamos objName se você estiver usando parâmetros de objeto, como nos métodos de ação asp.net mvc.
fonte
Um pouco melhor
fonte
Fiz uma comparação dos stringifiers JSON e os resultados são os seguintes:
O menor deles é a URL Object Notation .
fonte
ok, é um post antigo, mas estou enfrentando esse problema e encontrei minha solução pessoal .. talvez possa ajudar outra pessoa ..
fonte
As respostas acima não funcionam se você tiver muitos objetos aninhados. Em vez disso, você pode escolher a função param daqui - https://github.com/knowledgecode/jquery-param/blob/master/jquery-param.js Funcionou muito bem para mim!
fonte
SOLUÇÃO ES6 PARA A CODIFICAÇÃO DE CORDAS DE CONSULTA DE UM OBJETO JAVASCRIPT
fonte
Esta é uma solução que funcionará para back-ends .NET prontos para uso. Peguei a resposta principal deste segmento e atualizei-o para atender às nossas necessidades de .NET.
fonte
Eu escrevi um pacote exatamente para isso: object-query-string :)
Suporta objetos aninhados, matrizes, funções de codificação personalizadas, etc. Leve e sem jQuery.
retorna
fonte
Apenas outra maneira (nenhum objeto recursivo):
fonte
Consulte a resposta @ user187291, adicione "isArray" como parâmetro para fazer com que a matriz aninhada json seja convertida.
Para fazer o resultado:
staffId = 00000001 & Detalhe [0] .identityId = 123456 & Detalhe [1] .identityId = 654321
fonte
Você também pode conseguir isso usando JavaScript simples .
fonte