Zastanawiam się tylko, czy w Javascript jest coś wbudowanego, które może przyjąć formularz i zwrócić parametry zapytania, np .: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
Zastanawiałem się nad tym od lat.
javascript
string
forms
get
Liam
źródło
źródło
Odpowiedzi:
Jakiś czas temu próbowałem znaleźć odpowiedź na to pytanie, ale ostatecznie napisałem własną funkcję, która wyodrębnia wartości z formularza.
nie jest idealny, ale pasuje do moich potrzeb.
form_params zwraca mapowanie parametrów (klucz -> wartość). dane wejściowe to element formularza (element DOM)
Nie obsługuje pól, które umożliwiają wielokrotny wybór.
źródło
new Array()
do inicjalizacji słownika. Ale z drugiej strony, kod wygląda o wiele czyściej niż niektóre bzdury, które napisałbym ostatnio!Aktualizacja 2k20: użyj rozwiązania Josha z URLSearchParams.toString () .
Stara odpowiedź:
Bez jQuery
W przypadku przeglądarek, które nie obsługują składni funkcji strzałek, która wymaga ES5, zmień
.map...
wiersz naźródło
Jeśli używasz jQuery, możesz sprawdzić
jQuery.param()
http://api.jquery.com/jQuery.param/Przykład:
źródło
$.param($('#myform').serializeArray())
.$('#myform').serialize()
jQuery !== JavaScript
jQuery.param()
tutaj github.com/jquery/jquery/blob/master/src/serialize.js :)someStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
Interfejs API URLSearchParams jest dostępny we wszystkich nowoczesnych przeglądarkach. Na przykład:
źródło
params.append(key, value)
później dodać nowe parametry wyszukiwania w bardziej skomplikowanych scenariuszach.x=null&y=undefined
const url = new URL("https://stackoverflow.com")
), możesz ustawić jego ciągi zapytańurl.search = new URLSearchParams({foo: "bar"})
luburl.searchParams.append("foo", "bar")
To nie jest bezpośrednią odpowiedzią na twoje pytanie, ale oto ogólna funkcja, która utworzy adres URL zawierający parametry ciągu zapytania. Parametry (nazwy i wartości) są chronione za pomocą znaków zmiany znaczenia w celu umieszczenia ich w adresie URL.
źródło
new Array
czas inicjować, kiedy faktycznie używasz jej jako obiektu? o, ODzięki jQuery możesz to zrobić przez
$.param
źródło
ES2017 (ES8)
Wykorzystanie
Object.entries()
, które zwraca tablicę[key, value]
par obiektów. Na przykład,{a: 1, b: 2}
ponieważ powróci[['a', 1], ['b', 2]]
. Nie jest obsługiwany (i nie będzie) tylko przez IE.Kod:
Przykład:
Wynik:
źródło
Nie, nie sądzę, że standardowy JavaScript ma to wbudowane, ale Prototype JS ma tę funkcję (z pewnością większość innych frameworków JS też ma, ale ich nie znam), nazywają to serializacją .
Mogę polecić Prototype JS, działa całkiem nieźle. Jedyną wadą, jaką naprawdę zauważyłem, jest rozmiar (kilkaset kb) i zasięg (dużo kodu dla AJAX, DOM, itp.). Tak więc, jeśli chcesz tylko serializatora formularzy, jest to przesada, a ściśle mówiąc, jeśli chcesz mieć tylko funkcjonalność Ajax (do której głównie służyłem), to przesada. O ile nie jesteś ostrożny, może się okazać, że robi to trochę za dużo „magii” (jak na przykład rozszerzanie każdego elementu dom, którego dotyka za pomocą funkcji Prototype JS tylko po to, by znaleźć elementy), spowalniając go w skrajnych przypadkach.
źródło
Querystring może pomóc.
Więc możesz
źródło
Jeśli nie chcesz korzystać z biblioteki, powinno to obejmować większość / wszystkie te same typy elementów formularza.
źródło
W rzeczywistości nie potrzebujesz formularza, aby to zrobić z Prototype. Po prostu użyj funkcji Object.toQueryString :
źródło
W dzisiejszych czasach możesz to zrobić z
FormData
iURLSearchParams
bez potrzeby zapętlania wszystkiego.Starsze przeglądarki będą jednak potrzebowały wypełnienia.
źródło
Sam nie jestem do końca pewien, pamiętam, że widziałem, jak jQuery zrobił to w pewnym stopniu, ale w ogóle nie obsługuje rekordów hierarchicznych, nie mówiąc już w sposób przyjazny dla php.
Jedną rzeczą, którą wiem na pewno, jest to, że podczas budowania adresów URL i wklejania produktu do domeny nie używaj do tego zwykłego kleju, bo otworzysz się na poręczny program do łamania stron.
Na przykład, niektóre programy reklamowe wstawiają ciąg znaków wersji z tego, co uruchamia twój flash. To jest w porządku, gdy jego ogólny prosty ciąg adobes, ale jest to bardzo naiwne i wybucha w zawstydzającym bałaganie dla ludzi, którzy zainstalowali Gnash, ponieważ ciąg wersji gnash zawiera pełną licencję praw autorskich GPL, wraz z adresami URL i <a href>. Użycie tego w generatorze reklamodawców typu string-glue powoduje otwarcie strony i wyświetlenie niezrównoważonego kodu HTML w domenie.
Morał tej historii:
Nie:
Google musi nauczyć się tej sztuczki. Próbowałem zgłosić problem, wydaje się, że ich to nie obchodzi.
źródło
Jak mówi Stein, możesz skorzystać z prototypowej biblioteki javascript ze strony http://www.prototypejs.org . Dołącz JS i to jest bardzo proste,
$('formName').serialize()
zwróci to, co chcesz!źródło
Dla tych z nas, którzy wolą jQuery, powinniście użyć wtyczki formularza: http://plugins.jquery.com/project/form , która zawiera metodę formSerialize.
źródło
Może być trochę zbędny, ale najczystszy sposób, jaki znalazłem, oparty na niektórych odpowiedziach tutaj:
Źródło
źródło
Te odpowiedzi są bardzo pomocne, ale chcę dodać kolejną odpowiedź, która może pomóc w utworzeniu pełnego adresu URL. To może pomóc concat podstawy
url
,path
,hash
iparameters
.Możesz pobrać przez npm https://www.npmjs.com/package/build-url
Próbny:
źródło
Wiem, że to bardzo późna odpowiedź, ale działa bardzo dobrze ...
uwaga: obiekt.entries zwróci pary klucz, wartość
Mam nadzieję, że to komuś pomoże.
Miłego kodowania ...
źródło
Prawdopodobnie jest już za późno, aby odpowiedzieć na Twoje pytanie.
Miałem to samo pytanie i nie lubiłem nadal dołączać ciągów znaków, aby utworzyć adres URL. Więc zacząłem używać $ .param jak techhouse wyjaśnione.
Znalazłem również bibliotekę URI.js, która łatwo tworzy dla Ciebie adresy URL. Istnieje kilka przykładów, które pomogą Ci: URI.js Dokumentacja .
Oto jeden z nich:
źródło
źródło