Aktualizacja marzec 2017:
Obsługa URL.searchParams oficjalnie trafiła do Chrome 51, ale inne przeglądarki nadal wymagają wypełnienia polyfill .
Oficjalny sposób pracy z parametrami zapytania jest tylko, aby dodać je na adres URL. Ze specyfikacji jest to przykład:
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(/* … */)
Jednak nie jestem pewien, czy Chrome obsługuje searchParams
właściwość adresu URL (w momencie pisania), więc możesz chcieć użyć biblioteki innej firmy lub własnego rozwiązania .
Aktualizacja kwiecień 2018:
Za pomocą konstruktora URLSearchParams możesz przypisać tablicę 2D lub obiekt i po prostu przypisać to do url.search
zamiast zapętlania wszystkich kluczy i dołączyć je
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)
Uwaga dodatkowa: URLSearchParams
jest również dostępna w NodeJS
const { URL, URLSearchParams } = require('url');
Kodowanie Zmęczenie
źródło
URLSearchParams
interfejsu; Chciałbym założyć, (choć nie jestem w 100% pewien), że przeglądarek na czerwono są dokładnie przeglądarek, dla którychURL
obiekty nie będą miały.searchParams
właściwości. Co ważne, Edge nadal nie ma wsparcia.new URLSearchParams
nie wydaje się działać poprawnie zArray
właściwościami. Spodziewałem się, że przekonwertuje właściwośćarray: [1, 2]
naarray[]=1&array[]=2
, ale przekonwertowałem ją naarray=1,2
. Ręczne użycie tejappend
metody skutkujearray=1&array=2
, ale musiałbym iterować po obiekcie params i zrobić to tylko dla typów tablicowych, niezbyt ergonomicznych.źródło
Jak już odpowiedzieliśmy, zgodnie ze specyfikacją nie jest to jeszcze możliwe z
fetch
-API. Ale muszę zauważyć:Jeśli jesteś włączony
node
, jestquerystring
pakiet. Potrafi stringifikować / analizować obiekty / kwerendy:... a następnie po prostu dołącz go do adresu URL, aby zażądać.
Jednak problem z powyższym polega na tym, że zawsze musisz poprzedzić znak zapytania (
?
). Tak więc innym sposobem jest użycieparse
metody zurl
pakietu nodes i zrobienie tego w następujący sposób:Zobacz
query
na https://nodejs.org/api/url.html#url_url_format_urlobjJest to możliwe, ponieważ robi to wewnętrznie tylko w ten sposób :
źródło
Zwięzłe podejście ES6:
Funkcja toString () w URLSearchParams przekształci argumenty zapytania w ciąg znaków, który można dołączyć do adresu URL. W tym przykładzie toString () jest wywoływana niejawnie, gdy zostanie połączona z adresem URL.
IE nie obsługuje parametrów URLSearchParams, ale są dostępne polifile .
Jeśli używasz węzła, możesz znaleźć URLSearchParams jako obiekt globalny od wersji 10. W starszej wersji możesz go znaleźć
require('url').URLSearchParams
zamiast. Rzeczywisty interfejs API pobierania nie jest częścią węzła i należy go dodać za pośrednictwem pakietu, na przykład pobierania węzła .źródło
Możesz użyć
#stringify
z ciągu zapytaniaźródło
Może tak jest lepiej:
źródło
encodeQueryString - zakoduj obiekt jako parametry querystring
źródło
Wiem, że jest to absolutnie oczywiste, ale czuję, że warto dodać to jako odpowiedź, ponieważ jest to najprostsze ze wszystkich:
źródło
/
,+
czy&
pojawiają się w ciągu.Literały szablonów są również tutaj poprawną opcją i zapewniają kilka korzyści.
Możesz dołączyć nieprzetworzone ciągi, liczby, wartości logiczne itp .:
Możesz dołączyć zmienne:
Możesz dołączyć logikę i funkcje:
Jeśli chodzi o tworzenie struktury danych w większym ciągu zapytania, lubię używać tablicy połączonej z ciągiem. Jest to dla mnie łatwiejsze do zrozumienia niż niektóre inne metody:
źródło
+
lub,&
to nie będzie działać zgodnie z oczekiwaniami, a otrzymasz inne parametry i wartości niż myślisz.Pracowałem tylko z fetchModule firmy Nativescript i wymyśliłem własne rozwiązanie za pomocą operacji na ciągach znaków. Dołączaj ciąg zapytania bit po bicie do adresu URL. Oto przykład, w którym zapytanie jest przekazywane jako obiekt json (zapytanie = {order_id: 1}):
Przetestowałem to na wielu parametrach zapytania i zadziałało jak urok :) Mam nadzieję, że to komuś pomoże.
źródło
var paramsdate = 01 + '% s' + 12 + '% s' + 2012 + '% s';
request.get (" https://www.exampleurl.com?fromDate= " + paramsDate;
źródło