Em um aplicativo Web que utiliza chamadas AJAX, preciso enviar uma solicitação, mas adicionar um parâmetro ao final da URL, por exemplo:
URL original:
URL resultante:
http: //server/myapp.php? id = 10 & enabled = true
Procurando por uma função JavaScript que analise a URL observando cada parâmetro e adicione o novo parâmetro ou atualize o valor, se já existir.
javascript
url
parsing
parameters
query-string
Lessan Vaezi
fonte
fonte
Respostas:
Uma implementação básica que você precisará adaptar seria mais ou menos assim:
Isso é aproximadamente duas vezes mais rápido que uma solução baseada em regex ou pesquisa, mas isso depende completamente do tamanho da string de consulta e do índice de qualquer correspondência
o método regex lento com o qual comparou comparativamente para fins de conclusão (aproximadamente + 150% mais lento)
fonte
encodeURIComponent
e nãoencodeURI
? Caso contrário, qualquer caractere como=
,&
em seu nome ou valor, corromperá o URI.Você pode usar um destes:
Exemplo:
fonte
XML
ahttp://foo.bar/?x=1&y=2
para que o resultado final sejahttp://foo.bar/?x=1&y=2&XML
. Isso é possível? Eu tenteiurl.searchParams.set('XML');
,url.searchParams.set('XML', null);
eurl.searchParams.set('XML', undefined);
- mas nenhum funcionou no Chrome 63 .Obrigado a todos por sua contribuição. Eu usei o código annakata e modifiquei para incluir também o caso em que não há nenhuma string de consulta no URL. Espero que isso ajude.
fonte
escape(key)
eescape(value)
paraencodeURIComponent
funcionar.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
Esta é uma solução muito simples. Não controla a existência de parâmetros e não altera o valor existente. Ele adiciona seu parâmetro ao final, para que você possa obter o valor mais recente no seu código de back-end.
fonte
url = (url.indexOf("?") != -1 ? url.split("?")[0]+"?"+part+"&"+url.split("?")[1] : (url.indexOf("#") != -1 ? url.split("#")[0]+"?"+part+"#"+ url.split("#")[1] : url+'?'+part));
function appendQs(url, key, value) { return url + (url.indexOf('?') >= 0 ? "&" : '?') + encodeURIComponent(key) + "=" + encodeURIComponent(value); };
https://localhost/preview/inventory.html?sortci=priceASC&sortci=priceASC&sortci=stitle
.Aqui está uma versão bastante simplificada, fazendo trocas por legibilidade e menos linhas de código em vez de desempenho micro-otimizado (e estamos falando de uma diferença de alguns milissegundos, realisticamente ... devido à natureza disso (operando na localização do documento atual) ), provavelmente será executado uma vez em uma página).
Você usaria isso assim:
fonte
[\?&]
com([\?&])
no RegExp (eu tinha acabado de editar-lo eu mesmo, mas eu não tenho certeza se a política comunitária permite corrigir erros em respostas).E observe que os parâmetros devem ser codificados antes de serem anexados na string de consulta.
http://jsfiddle.net/48z7z4kx/
fonte
http://abc.def/?a&b&b
)..set primeiro agrument é a chave, o segundo é o valor.
fonte
Eu tenho uma 'classe' que faz isso e aqui está:
Eu substituí o método toString, portanto não há necessidade de chamar QS :: getQueryString, você pode usar QS :: toString ou, como já fiz nos exemplos, basta confiar no objeto sendo coagido em uma string.
fonte
Se você tem uma string com url que deseja decorar com um parâmetro, tente o seguinte:
Isso significa isso ? será o prefixo do parâmetro, mas se você já possui ? em
urlstring
, que & será o prefixo.Eu recomendaria também fazer
encodeURI( paramvariable )
se você não codificou o parâmetro, mas está dentro de umparamvariable
; ou se você tiver personagens engraçados.Consulte a codificação de URL javascript para usar a
encodeURI
função.fonte
Esta é uma maneira simples de adicionar um parâmetro de consulta:
E é isso mais aqui .
Observe as especificações de suporte .
fonte
Confira https://github.com/derek-watson/jsUri
Manipulação de URL e consulta em javascript.
Este projeto incorpora a excelente biblioteca de expressões regulares parseUri de Steven Levithan. Você pode analisar com segurança URLs de todas as formas e tamanhos, por mais inválidos ou hediondos.
fonte
Às vezes vemos
?
no URL final, encontrei algumas soluções que geram resultados comofile.php?&foo=bar
. Eu vim com minha própria solução funcionar perfeitamente como eu quero!Nota: location.origin não funciona no IE, aqui está sua correção .
fonte
A função a seguir ajudará você a adicionar, atualizar e excluir parâmetros para ou do URL.
// example1and
// exemplo2
// exemplo3
// example4
// example5
Aqui está a função.
fonte
Esta foi minha própria tentativa, mas usarei a resposta de annakata, pois parece muito mais limpa:
Além disso, eu encontrei esse plugin jQuery em outra postagem no stackoverflow e, se precisar de mais flexibilidade, poderá usá-lo: http://plugins.jquery.com/project/query-object
Eu acho que o código seria (não testei):
fonte
Adicionando à @ Vianney's Answer https://stackoverflow.com/a/44160941/6609678
Podemos importar o módulo de URL embutido no nó da seguinte maneira
Exemplo:
Links Úteis:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
fonte
Tente isso.
fonte
url.searchParams
é a lista de parâmetros pré-inicializados para esseURL
objeto.Eu gosto da resposta de Mehmet Fatih Yıldız, mesmo que ele não tenha respondido a toda a pergunta.
Na mesma linha que sua resposta, eu uso este código:
"Não controla a existência de parâmetros e não altera o valor existente. Adiciona seu parâmetro ao final"
e o testador:
fonte
Eu iria com isso pequena mas completa biblioteca para manipular urls em js:
https://github.com/Mikhus/jsurl
fonte
É isso que eu uso quando se trata de algumas adições ou atualizações básicas de parâmetros de URL no lado do servidor, como Node.js.
CoffeScript:
JavaScript:
fonte
A solução mais fácil, funciona se você já possui uma tag ou não, e a remove automaticamente para que não continue adicionando tags iguais, divirta-se
ENTÃO
fonte
A resposta de Vianney Bajart está correta; no entanto, o URL funcionará apenas se você tiver o URL completo com porta, host, caminho e consulta:
E URLSearchParams funcionará apenas se você passar apenas a string de consulta:
Se você tem um URL incompleto ou relativo e não se importa com o URL base, basta dividir
?
para obter a string de consulta e ingressar mais tarde, assim:Não é compatível com o Internet Explorer.
fonte
var u = new URL(window.location), usp = u.searchParams;
, não precisará usar nenhuma divisão de fantasia.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Se você estiver mexendo com URLs em links ou em outro lugar, talvez seja necessário levar o hash em consideração também. Aqui está uma solução bastante simples de entender. Provavelmente não é o MAIS RÁPIDO, pois usa um regex ... mas em 99,999% dos casos, a diferença realmente não importa!
fonte
A solução mais simples que consigo pensar é esse método, que retornará o URI modificado. Sinto que a maioria de vocês está trabalhando demais.
fonte
Ok, aqui eu comparo duas funções, uma feita por mim (regExp) e outra feita por (annakata).
Dividir matriz:
Método Regexp:
Caso de teste:
Parece que mesmo com a solução mais simples (quando o regexp usa apenas teste e não entra na função .replace), ainda é mais lento que a divisão ... Bem. Regexp é meio lento, mas ... uhh ...
fonte
Aqui está o que eu faço. Usando minha função editParams (), você pode adicionar, remover ou alterar qualquer parâmetro e, em seguida, usar a função replaceState () incorporada para atualizar a URL:
fonte
Na melhor das hipóteses, posso dizer que nenhuma das respostas acima aborda o caso em que a string de consulta contém parâmetros que são uma matriz e, portanto, aparecerão mais de uma vez, por exemplo:
A seguinte função é o que escrevi para atualizar
document.location.search
. Ele usa uma matriz de matrizes de pares chave / valor como argumento e retornará uma versão revisada da última, com a qual você pode fazer o que quiser. Estou usando assim:Se o URL atual fosse:
http://example.com/index.php?test=replaceme&sizes[]=XL
Isso te levaria
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
Função
fonte
Tente
As expressões regulares, tão lentas, assim:
Exemplo:
fonte
Com as novas conquistas em JS, veja como se pode adicionar parâmetros de consulta ao URL:
Veja também esta possibilidade: Moziila URLSearchParams.append ()
fonte
Isso funcionará em todos os navegadores modernos.
fonte
Redefinir toda a sequência de consultas
fonte