Update März 2017:
Die Unterstützung für URL.searchParams ist offiziell in Chrome 51 gelandet, andere Browser benötigen jedoch weiterhin eine Polyfüllung .
Die offizielle Methode zum Arbeiten mit Abfrageparametern besteht darin, sie der URL hinzuzufügen. Aus der Spezifikation ist dies ein Beispiel:
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(/* … */)
Ich bin mir jedoch nicht sicher, ob Chrome die searchParams
Eigenschaft einer URL (zum Zeitpunkt des Schreibens) unterstützt. Daher möchten Sie möglicherweise entweder eine Bibliothek eines Drittanbieters oder eine eigene Lösung verwenden .
Update April 2018:
Mit dem URLSearchParams-Konstruktor können Sie ein 2D-Array oder ein Objekt zuweisen und dies einfach dem zuweisen, url.search
anstatt alle Schlüssel zu durchlaufen und sie anzuhängen
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)
Nebenbemerkung: URLSearchParams
ist auch in NodeJS verfügbar
const { URL, URLSearchParams } = require('url');
URLSearchParams
Benutzeroberfläche finden Sie unter caniuse.com/#feat=urlsearchparams . Ich würde annehmen (obwohl ich nicht 100% sicher bin), dass die Browser in Rot genau die Browser sind, für dieURL
Objekte die.searchParams
Eigenschaft nicht haben . Wichtig ist, dass Edge immer noch keine Unterstützung bietet.new URLSearchParams
scheint mitArray
Eigenschaften nicht richtig zu funktionieren . Ich habe erwartet, dass es die Eigenschaftarray: [1, 2]
inarray[]=1&array[]=2
konvertiert, aber konvertiert inarray=1,2
. Die manuelle Verwendung derappend
Methode führt zwar dazuarray=1&array=2
, aber ich müsste über das params-Objekt iterieren und dies nur für Array-Typen tun, die nicht sehr ergonomisch sind.quelle
Wie bereits beantwortet, ist dies per Spezifikation mit der
fetch
-API noch nicht möglich . Aber ich muss beachten:Wenn Sie eingeschaltet sind
node
, gibt es dasquerystring
Paket. Es kann Objekte / Abfrageringe stringifizieren / analysieren:... dann hängen Sie es einfach an die URL an, um es anzufordern.
Das Problem mit dem oben genannten ist jedoch, dass Sie immer ein Fragezeichen (
?
) voranstellen müssen . Eine andere Möglichkeit besteht darin, dieparse
Methode aus dem Knotenpaketurl
wie folgt zu verwenden:Siehe
query
unter https://nodejs.org/api/url.html#url_url_format_urlobjDies ist möglich, da es intern genau dies tut :
quelle
Ein prägnanter ES6-Ansatz:
Die Funktion toString () von URLSearchParam konvertiert die Abfrageargumente in eine Zeichenfolge, die an die URL angehängt werden kann. In diesem Beispiel wird toString () implizit aufgerufen, wenn es mit der URL verkettet wird.
IE unterstützt diese Funktion nicht, es sind jedoch Polyfills verfügbar.
quelle
Sie können
#stringify
aus Abfragezeichenfolge verwendenquelle
Vielleicht ist das besser:
quelle
encodeQueryString - Codiert ein Objekt als Querystring-Parameter
quelle
Ich weiß, dass dies das absolut Offensichtliche ist, aber ich denke, es lohnt sich, dies als Antwort hinzuzufügen, da es das einfachste von allen ist:
quelle
/
,+
oder&
in der Zeichenfolge erscheinen.Vorlagenliterale sind auch hier eine gültige Option und bieten einige Vorteile.
Sie können rohe Zeichenfolgen, Zahlen, boolesche Werte usw. einschließen:
Sie können Variablen einschließen:
Sie können Logik und Funktionen einschließen:
Was die Strukturierung der Daten einer größeren Abfragezeichenfolge angeht, verwende ich gerne ein Array, das mit einer Zeichenfolge verknüpft ist. Ich finde es leichter zu verstehen als einige der anderen Methoden:
quelle
+
oder enthält,&
funktioniert sie nicht wie erwartet und Sie erhalten andere Parameter und Werte als gedacht.Ich habe gerade mit fetchModule von Nativescript gearbeitet und mithilfe von String-Manipulationen meine eigene Lösung gefunden. Hängen Sie die Abfragezeichenfolge Stück für Stück an die URL an. Hier ist ein Beispiel, in dem die Abfrage als JSON-Objekt übergeben wird (query = {order_id: 1}):
Ich habe dies über mehrere Abfrageparameter getestet und es hat wie ein Zauber funktioniert :) Ich hoffe, das hilft jemandem.
quelle
var paramsdate = 01 + '% s' + 12 + '% s' + 2012 + '% s';
request.get (" https://www.exampleurl.com?fromDate= " + paramsDate;
quelle