Mise à jour mars 2017:
Le support d' URL.searchParams a officiellement atterri dans Chrome 51, mais d'autres navigateurs nécessitent toujours un polyfill .
La manière officielle de travailler avec les paramètres de requête consiste simplement à les ajouter à l'URL. D'après les spécifications , voici un exemple:
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(/* … */)
Cependant, je ne suis pas sûr que Chrome prenne en charge la searchParams
propriété d'une URL (au moment de la rédaction de cet article), vous pouvez donc utiliser une bibliothèque tierce ou une solution personnalisée .
Mise à jour avril 2018:
Avec l'utilisation du constructeur URLSearchParams, vous pouvez attribuer un tableau 2D ou un objet et l'attribuer simplement au au url.search
lieu de boucler sur toutes les clés et de les ajouter
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
est également disponible dans NodeJS
const { URL, URLSearchParams } = require('url');
URLSearchParams
interface; Je suppose (bien que je ne sois pas certain à 100%) que les navigateurs en rouge sont exactement les navigateurs pour lesquels lesURL
objets n'auront pas la.searchParams
propriété. Surtout, Edge n'a toujours pas de support.new URLSearchParams
ne semble pas fonctionner correctement avec lesArray
propriétés. Je m'attendais à ce qu'il convertisse la propriétéarray: [1, 2]
enarray[]=1&array[]=2
, mais je l'ai convertie enarray=1,2
. Utiliser manuellement laappend
méthode de celui-ci entraînearray=1&array=2
, mais je devrais itérer sur l'objet params, et le faire uniquement pour les types de tableaux, pas très ergonomiques.la source
Comme déjà répondu, cela n'est pas possible selon les spécifications avec le
fetch
-API, pour le moment. Mais je dois noter:Si vous êtes sur
node
, voici lequerystring
package. Il peut stringifier / analyser des objets / des chaînes de requêtes:... puis ajoutez-le simplement à l'URL pour demander.
Cependant, le problème avec ce qui précède est que vous devez toujours ajouter un point d'interrogation (
?
). Donc, une autre façon est d'utiliser laparse
méthode duurl
package de nœuds et de le faire comme suit:Voir
query
à https://nodejs.org/api/url.html#url_url_format_urlobjCeci est possible, car il le fait en interne juste ceci :
la source
Une approche ES6 concise:
La fonction toString () d' URLSearchParams convertit les arguments de la requête en une chaîne qui peut être ajoutée à l'URL. Dans cet exemple, toString () est appelé implicitement lorsqu'il est concaténé avec l'URL.
IE ne prend pas en charge URLSearchParams, mais des polyfills sont disponibles.
Si vous utilisez node, vous pouvez trouver URLSearchParams en tant qu'objet global depuis la version 10. Dans l'ancienne version, vous pouvez le trouver à la
require('url').URLSearchParams
place. L'API d'extraction réelle ne fait pas partie du nœud et doit être ajoutée via un package, tel que node-fetch .la source
Vous pouvez utiliser à
#stringify
partir de la chaîne de requêtela source
Peut-être que c'est mieux:
la source
encodeQueryString - encode un objet en tant que paramètres de chaîne de requête
la source
Je sais que c'est une évidence absolue, mais je pense que cela vaut la peine d'ajouter ceci comme réponse car c'est la plus simple de toutes:
la source
/
,+
ou&
apparaissent dans la chaîne.Les littéraux de modèle sont également une option valable ici et offrent quelques avantages.
Vous pouvez inclure des chaînes brutes, des nombres, des valeurs booléennes, etc.:
Vous pouvez inclure des variables:
Vous pouvez inclure la logique et les fonctions:
En ce qui concerne la structuration des données d'une chaîne de requête plus grande, j'aime utiliser un tableau concaténé en une chaîne. Je trouve cela plus facile à comprendre que certaines des autres méthodes:
la source
+
ou&
alors cela ne fonctionnera pas comme prévu et vous vous retrouverez avec des paramètres et des valeurs différents de ce que vous pensiez.Je travaillais juste avec fetchModule de Nativescript et j'ai trouvé ma propre solution en utilisant la manipulation de chaînes. Ajoutez la chaîne de requête petit à petit à l'URL. Voici un exemple où la requête est passée en tant qu'objet json (query = {order_id: 1}):
J'ai testé cela sur plusieurs paramètres de requête et cela a fonctionné comme un charme :) J'espère que cela aide quelqu'un.
la source
var paramsdate = 01 + '% s' + 12 + '% s' + 2012 + '% s';
request.get (" https://www.exampleurl.com?fromDate= " + paramsDate;
la source