Atualização em março de 2017:
O suporte ao URL.searchParams chegou oficialmente ao Chrome 51, mas outros navegadores ainda exigem um polyfill .
A maneira oficial de trabalhar com parâmetros de consulta é apenas adicioná-los ao URL. A partir da especificação , este é um exemplo:
var url = new URL("https://geo.example.org/api"),
params = {lat:35.696233, long:139.570431}
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))
fetch(url).then(/* … */)
No entanto, eu não tenho certeza Chrome suporta a searchParams
propriedade de uma URL (no momento da escrita), de modo que você pode querer ou uso uma biblioteca de terceiros ou solução roll-seu-próprio .
Atualização em abril de 2018:
Com o uso do construtor URLSearchParams, você pode atribuir uma matriz 2D ou um objeto e atribuir isso ao url.search
invés de repetir todas as chaves e anexá-las
var url = new URL('https://sl.se')
var params = {lat:35.696233, long:139.570431} // or:
var params = [['lat', '35.696233'], ['long', '139.570431']]
url.search = new URLSearchParams(params).toString();
fetch(url)
Sidenote: URLSearchParams
também está disponível no NodeJS
const { URL, URLSearchParams } = require('url');
URLSearchParams
interface; Eu supor (embora eu não estou 100% certo) que os navegadores em vermelho não são exatamente os navegadores para os quaisURL
objetos não têm a.searchParams
propriedade. Importante, o Edge ainda não tem suporte.new URLSearchParams
parece não funcionar corretamente comArray
propriedades. Eu esperava que ele convertesse a propriedadearray: [1, 2]
emarray[]=1&array[]=2
, mas a converti emarray=1,2
. O uso manual doappend
método resultaarray=1&array=2
, mas eu teria que repetir o objeto params e fazer isso apenas para tipos de matriz, não muito ergonômicos.fonte
Como já foi respondido, isso é por especificação não possível com o
fetch
especificação -API. Mas tenho que observar:Se você estiver
node
, há oquerystring
pacote. Pode stringify / analisar objetos / querystrings:... basta anexá-lo ao URL para solicitar.
No entanto, o problema com o exposto acima é que você sempre deve preceder um ponto de interrogação (
?
). Portanto, outra maneira é usar oparse
método dourl
pacote nodes e fazer o seguinte:Veja
query
em https://nodejs.org/api/url.html#url_url_format_urlobjIsso é possível, pois ele faz internamente exatamente isso :
fonte
Uma abordagem concisa do ES6:
A função toString () do URLSearchParam converterá os argumentos da consulta em uma sequência que pode ser anexada ao URL. Neste exemplo, toString () é chamado implicitamente quando é concatenado com a URL.
O IE não suporta esse recurso, mas existem polyfills disponíveis.
fonte
Você pode usar
#stringify
da string de consultafonte
Talvez seja melhor:
fonte
encodeQueryString - codifica um objeto como parâmetros de querystring
fonte
Sei que isso é absolutamente óbvio, mas acho que vale a pena adicionar isso como resposta, pois é o mais simples de todos:
fonte
/
,+
ou&
aparecer na string.Os literais de modelo também são uma opção válida aqui e fornecem alguns benefícios.
Você pode incluir strings, números, valores booleanos, etc:
Você pode incluir variáveis:
Você pode incluir lógica e funções:
Quanto a estruturar os dados de uma string de consulta maior, eu gosto de usar uma matriz concatenada em uma string. Acho mais fácil entender do que alguns dos outros métodos:
fonte
+
ou&
não, ela não funcionará conforme o esperado e você terminará com parâmetros e valores diferentes do que pensava.Estava trabalhando com o fetchModule do Nativescript e descobri minha própria solução usando manipulação de string. Anexe a string de consulta pouco a pouco ao URL. Aqui está um exemplo em que a consulta é passada como um objeto json (query = {order_id: 1}):
Eu testei isso em vários parâmetros de consulta e funcionou como um encanto :) Espero que isso ajude alguém.
fonte
var paramsdate = 01 + '% s' + 12 + '% s' + 2012 + '% s';
request.get (" https://www.exampleurl.com?fromDate= " + paramsDate;
fonte