Czy istnieje biblioteka JavaScript, która tworzy słownik z ciągu zapytania, ASP.NET
stylu?
Coś, czego można użyć, na przykład:
var query = window.location.querystring["query"]?
Czy „ciąg zapytania” nazywa się czymś spoza .NET
dziedziny? Dlaczego nie jest location.search
podzielony na kolekcję kluczy / wartości ?
EDYCJA : Napisałem własną funkcję, ale czy robi to jakakolwiek większa biblioteka JavaScript?
javascript
query-string
rdzeń
źródło
źródło
Odpowiedzi:
Może http://plugins.jquery.com/query-object/ ?
To jest jego rozwidlenie https://github.com/sousk/jquery.parsequery#readme .
źródło
Możesz wyodrębnić pary klucz / wartość z pliku właściwości location.search , ta właściwość ma część adresu URL następującą po znaku? symbol, w tym? symbol.
źródło
dork.com/?equation=10=2
...?val=foo&val=bar&val=baz
jak byś to zrobił?val=foo&val=bar&val=baz
; to musiało byćval[]=foo&val[]=bar&val[]=baz
%20
s, więc zastąpiłemresult[keyValuePair[0]] = keyValuePair[1] || '';
jeresult[keyValuePair[0]] = decodeURIComponent((keyValuePair[1]+'').replace(/\+/g, '%20')) || '';
tl; dr rozwiązanie w pojedynczym (ish) wierszu kodu przy użyciu zwykłego javascript
W przypadku zapytania
?a=1&b=2&c=3&d&e
zwraca:klucze wielowartościowe i zakodowane znaki ?
Zobacz oryginalną odpowiedź w artykule Jak uzyskać wartości ciągu zapytania w języku JavaScript?
źródło
Po znalezieniu tego posta, patrząc na siebie, pomyślałem, że powinienem dodać, że nie sądzę, aby rozwiązanie, które uzyskało najwięcej głosów, jest najlepsze. Nie obsługuje wartości tablicowych (takich jak? A = foo & a = bar - w tym przypadku spodziewałbym się zwrócenia a ['foo', 'bar']). O ile wiem, nie bierze pod uwagę zakodowanych wartości - takich jak kodowanie znaków szesnastkowych, gdzie% 20 reprezentuje spację (przykład:? A = Hello% 20World) lub symbol plus używany do reprezentowania spacji (przykład :? a = Hello + World).
Node.js oferuje coś, co wygląda na bardzo kompletne rozwiązanie do analizowania zapytań. Byłby łatwy do wyjęcia i wykorzystania we własnym projekcie, ponieważ jest on dość dobrze odizolowany i podlega liberalnej licencji.
Kod do tego można obejrzeć tutaj: https://github.com/joyent/node/blob/master/lib/querystring.js
Testy, które przeprowadził Node, można zobaczyć tutaj: https://github.com/joyent/node/blob/master/test/simple/test-querystring.js Sugerowałbym wypróbowanie niektórych z nich z popularną odpowiedzią, aby zobaczyć, jak to obsługuje je.
Jest też projekt, w którym byłem zaangażowany, aby specjalnie dodać tę funkcjonalność. Jest to port standardowego modułu analizującego łańcuchy zapytań lib w języku Python. Mój widelec można znaleźć tutaj: https://github.com/d0ugal/jquery.qeeree
źródło
Możesz też skorzystać z biblioteki sugar.js .
Z sugarjs.com:
Przykład:
źródło
Jeśli masz pod ręką querystring, użyj tego:
źródło
źródło
decodeURIComponent
przynajmniej wyodrębnionych strun.decodeURIComponent
stoiska.Warto zauważyć, że biblioteka, o której wspomniał John Slegers, ma zależność od jQuery, jednak tutaj jest wersja, która jest zwykłym Javascriptem.
https://github.com/EldonMcGuinness/querystring.js
Po prostu skomentowałbym jego post, ale brakuje mi do tego reputacji. : /
Przykład:
Poniższy przykład przetwarza następujący, choć nieregularny, ciąg zapytania:
źródło
Kod
This Gist autorstwa Eldona McGuinnessa jest zdecydowanie najbardziej kompletną implementacją parsera ciągu zapytań JavaScript, jaką widziałem do tej pory.
Niestety jest napisany jako wtyczka jQuery.
Przepisałem go na waniliowy JS i wprowadziłem kilka ulepszeń:
Jak tego użyć
Wynik
Zobacz także to Fiddle .
źródło
źródło
Lubię, gdy jest to proste, czytelne i małe.
Przykład:
źródło
Funkcja, którą napisałem dla wymagania podobnego do tego z czystą manipulacją ciągiem javascript
Stosowanie:
źródło
?
, jest to w zasadzie to samo, co dwie odpowiedzi nad tobą?Jeśli używasz lodash + ES6, oto jedno liniowe rozwiązanie:
_.object(window.location.search.replace(/(^\?)/, '').split('&').map(keyVal => keyVal.split('=')));
źródło
Okay, ponieważ wszyscy ignorują moje rzeczywiste pytanie, heh, moje też opublikuję! Oto co mam:
A testy:
Pamiętaj, że JavaScript nie jest moim językiem ojczystym.
W każdym razie szukam biblioteki JavaScript (np. JQuery, Prototype), która ma już napisaną. :)
źródło
Opierając się na odpowiedzi @CMS, mam następujące elementy (w CoffeeScript, który można łatwo przekonwertować na JavaScript):
Możesz łatwo pobrać to, czego potrzebujesz, dzięki:
Tutaj wygrywa interfejs zorientowany obiektowo (zamiast funkcjonalnego) i można to zrobić na dowolnym ciągu znaków (nie tylko na location.search).
Jeśli korzystasz już z biblioteki JavaScript, ta funkcja już istnieje. Na przykład tutaj jest wersja Prototype
źródło