Czy znasz szybki i prosty sposób na zakodowanie obiektu JavaScript w obiekcie, string
który mogę przekazać za pośrednictwem GET
żądania?
Nie jQuery
, żadnych innych frameworków - po prostu Javascript :)
javascript
query-string
urlencode
napolux
źródło
źródło
URLSearchParams
teraz ...Odpowiedzi:
lubię to?
Edycja: ten konwertuje również obiekty rekurencyjne (używając notacji php „tablica” dla ciągu zapytania)
źródło
jQuery ma do tego funkcję
jQuery.param()
, jeśli już go używasz, możesz go użyć: http://api.jquery.com/jquery.param/przykład:
str
teraz zawierawidth=1680&height=1050
źródło
var a = []; a[5] = 'foo'; jQuery.param({ parameters: a });
Wyniki w"parameters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=foo"
. Które, choć poprawne, może nie być tym, czego oczekujesz.Wystarczy użyć
URLSearchParams
To działa we wszystkich obecnych przeglądarkachźródło
let j = { m: 5, n: { k: 1 } }; new URLSearchParams(j).toString(); // result "m=5&n=%5Bobject+Object%5D"
stringify
zagnieżdżone obiekty, zanim będziesz mógłURLSearchParams
Edycja: Podoba mi się ten linijka, ale założę się, że byłaby bardziej popularna, gdyby pasowała do zaakceptowanej odpowiedzi semantycznie:
źródło
Object.keys(obj).map(k => k + '=' + encodeURIComponent(obj[k])).join('&')
Object.keys
jest dostępna tylko w IE> = 9Object.keys(obj).map(k => `${k}=${encodeURIComponent(obj[k])}`).join('&')
Object.entries(obj).map(e => e.map(ee => encodeURIComponent(ee)).join('=')).join('&');
Oto jedna linijka w ES6:
źródło
export?actions[]=finance,create,edit
kiedy powinno miećexport?actions[]=finance&actions[]=create&actions[]=edit
tak okropny standard.actions[]
jest notacją PHP; Djangoaction
zamiast tego używa wielu (bez[]
przyrostka); niektóre inne ORM / CMS wymagają list oddzielonych przecinkami itp. Więc „jeśli to nie są proste ciągi, najpierw upewnij się, że wiesz, czego Twój serwer nawet chce”.Z Node.js v6.6.3
Odniesienie: https://nodejs.org/api/querystring.html
źródło
Sugeruję użycie
URLSearchParams
interfejsu:Lub przekazując obiekt wyszukiwania do konstruktora w następujący sposób:
źródło
Mała poprawka do zaakceptowanego rozwiązania przez użytkownika187291:
Sprawdzanie hasOwnProperty na obiekcie sprawia, że JSLint / JSHint jest szczęśliwy i zapobiega przypadkowemu szeregowaniu metod obiektu lub innych rzeczy, jeśli obiekt jest czymś innym niż zwykłym słownikiem. Patrz akapit na oświadczenia na tej stronie: http://javascript.crockford.com/code.html
źródło
Wygląda na to, że wszyscy wkładają tu swoją liniówkę, więc oto moja:
źródło
Czy musisz wysyłać dowolne obiekty? Jeśli tak, GET jest złym pomysłem, ponieważ istnieją ograniczenia długości adresów URL, które akceptują agenci użytkownika i serwery WWW. Moją sugestią byłoby zbudowanie tablicy par nazwa-wartość do wysłania, a następnie utworzenie ciągu zapytania:
źródło
Kreator zapytań w stylu Rails / PHP
Ta metoda przekształca obiekt Javascript w plik
URI Query String
. Obsługuje również zagnieżdżone tablice i obiekty (wRails
/PHP
syntax):Przykładowe użycie:
źródło
function
aby wykluczyćfalsy
wartości (null, undefined, NaN, '') ...użyj JSON.
spójrz na to pytanie, aby znaleźć pomysły na wdrożenie.
źródło
Oto coffeescriptowa wersja zaakceptowanej odpowiedzi. Może to komuś zaoszczędzić czas.
źródło
Oto zwięzła i rekurencyjna wersja z Object.entries . Obsługuje dowolnie zagnieżdżone tablice, ale nie zagnieżdżone obiekty. Usuwa również puste elementy:
Na przykład:
źródło
Ta pomija wartości zerowe / niezdefiniowane
źródło
W ES7 możesz napisać to w jednym wierszu:
źródło
Pojedyncza linia do konwersji obiektu na ciąg zapytania, na wypadek, gdyby ktoś go ponownie potrzebował
źródło
Mam prostsze rozwiązanie, które nie korzysta z żadnej biblioteki innej firmy i jest już gotowe do użycia w dowolnej przeglądarce, która ma „Object.keys” (inaczej wszystkie współczesne przeglądarki + Edge + ie):
W ES5
W ES3
źródło
Jeśli chcesz rekurencyjnie przekonwertować zagnieżdżony obiekt, a obiekt może zawierać tablice lub nie (a tablice mogą zawierać obiekty lub tablice itp.), Rozwiązanie staje się nieco bardziej złożone. To jest moja próba.
Dodałem również kilka opcji do wyboru, jeśli chcesz nagrywać dla każdego elementu obiektu na jakiej głębokości w głównym obiekcie, w którym on się znajduje, oraz do wyboru, czy chcesz dodać etykietę do elementów pochodzących z przekonwertowanych tablic.
Idealnie powinieneś przetestować, czy parametr rzeczy rzeczywiście otrzymuje obiekt lub tablicę.
źródło
Dodanie do zaakceptowanego rozwiązania, działa z obiektami i tablicą obiektów:
Dodano także obiekt objName, jeśli używasz parametrów obiektu, takich jak metody akcji asp.net mvc.
źródło
Trochę lepiej wyglądają
źródło
Zrobiłem porównanie stringifiers JSON , a wyniki przedstawiają się następująco:
Najkrótsza z nich to notacja obiektowa adresu URL .
źródło
ok, to starszy post, ale mam do czynienia z tym problemem i znalazłem swoje osobiste rozwiązanie ... może może pomóc komuś innemu ...
źródło
Powyższe odpowiedzi nie działają, jeśli masz wiele zagnieżdżonych obiektów. Zamiast tego możesz wybrać parametr funkcji tutaj - https://github.com/knowledgecode/jquery-param/blob/master/jquery-param.js Działa to dla mnie bardzo dobrze!
źródło
ES6 ROZWIĄZANIE DO ZAPYTANIA STRINGOWEGO KODOWANIA OBIEKTU JAVASCRIPT
źródło
To rozwiązanie będzie działać dla backendów .NET od razu po wyjęciu z pudełka. Wziąłem podstawową odpowiedź tego wątku i zaktualizowałem go, aby pasował do naszych potrzeb .NET.
źródło
Napisałem właśnie do tego pakiet: object-query-string :)
Obsługuje zagnieżdżone obiekty, tablice, niestandardowe funkcje kodowania itp. Lekki i bez jQuery.
zwroty
źródło
Po prostu inny sposób (brak obiektu rekurencyjnego):
źródło
Zapoznaj się z odpowiedzią @ user187291, dodaj „isArray” jako parametr, aby konwertować zagnieżdżoną tablicę json.
Aby uzyskać wynik:
staffId = 00000001 i Szczegół [0] .identityId = 123456 i Szczegół [1] .identityId = 654321
źródło
Możesz to również osiągnąć za pomocą prostego JavaScript .
źródło