Actualización de marzo de 2017:
La compatibilidad con URL.searchParams ha aterrizado oficialmente en Chrome 51, pero otros navegadores aún requieren un polyfill .
La forma oficial de trabajar con parámetros de consulta es simplemente agregarlos a la URL. De la especificación , este es un ejemplo:
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(/* … */)
Sin embargo, no estoy seguro de que Chrome sea compatible con la searchParams
propiedad de una URL (en el momento de la escritura), por lo que es posible que desee utilizar una biblioteca de terceros o una solución roll-your-own .
Actualización de abril de 2018:
Con el uso del constructor URLSearchParams , puede asignar una matriz 2D o un objeto y simplemente asignarlo al en url.search
lugar de recorrer todas las teclas y agregarlas
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)
URLSearchParams
Nota al margen : también está disponible en NodeJS
const { URL, URLSearchParams } = require('url');
CodificaciónIntriga
fuente
URLSearchParams
interfaz; Me supongo (aunque no estoy 100% seguro) que los navegadores en rojo no son exactamente los navegadores para los queURL
los objetos no tendrá la.searchParams
propiedad. Es importante destacar que Edge todavía no tiene soporte.new URLSearchParams
no parece funcionar correctamente conArray
propiedades. Me esperaba que para convertir la propiedadarray: [1, 2]
aarray[]=1&array[]=2
, pero convertí aarray=1,2
. El uso manual delappend
método resulta enarray=1&array=2
, pero tendría que iterar sobre el objeto params, y hacerlo solo para los tipos de matriz, no muy ergonómicos.fuente
Como ya se respondió, esto es por especificación no posible con el
fetch
-API, todavía. Pero tengo que tener en cuenta:Si estás encendido
node
, ahí está elquerystring
paquete. Puede stringificar / analizar objetos / cadenas de consulta:... luego añádelo a la url para solicitarlo.
Sin embargo, el problema con lo anterior es que siempre tiene que anteponer un signo de interrogación (
?
). Entonces, otra forma es usar elparse
método delurl
paquete de nodos y hacerlo de la siguiente manera:Ver
query
en https://nodejs.org/api/url.html#url_url_format_urlobjEsto es posible, ya que internamente solo esto :
fuente
Un enfoque conciso de ES6:
La función toString () de URLSearchParam convertirá los argumentos de consulta en una cadena que se puede agregar a la URL. En este ejemplo, toString () se llama implícitamente cuando se concatena con la URL.
IE no es compatible con esta función, pero hay polyfills disponibles.
fuente
Puede usar
#stringify
desde la cadena de consultafuente
Quizás esto es mejor:
fuente
encodeQueryString - codifica un objeto como parámetros de cadena de consulta
fuente
Sé que esto indica lo absolutamente obvio, pero creo que vale la pena agregar esto como respuesta, ya que es el más simple de todos:
fuente
/
,+
o&
aparecer en la cadena.Los literales de plantilla también son una opción válida aquí y brindan algunos beneficios.
Puede incluir cadenas sin formato, números, valores booleanos, etc.
Puedes incluir variables:
Puede incluir lógica y funciones:
En cuanto a estructurar los datos de una cadena de consulta más grande, me gusta usar una matriz concatenada a una cadena. Me resulta más fácil de entender que algunos de los otros métodos:
fuente
+
o&
entonces no funcionará como se esperaba y terminará con diferentes parámetros y valores a lo que pensaba.Solo estaba trabajando con fetchModule de Nativescript y descubrí mi propia solución usando la manipulación de cadenas. Agregue la cadena de consulta bit a bit a la url. Aquí hay un ejemplo donde la consulta se pasa como un objeto json (query = {order_id: 1}):
Probé esto en varios parámetros de consulta y funcionó de maravilla :) Espero que esto ayude a alguien.
fuente
var paramsdate = 01 + '% s' + 12 + '% s' + 2012 + '% s';
request.get (" https://www.exampleurl.com?fromDate= " + paramsDate;
fuente