naprawdę, HTML lepiej to naświetla. <input name="user[name]" /> <input name="user[email]" />wewnątrz <form>kontenera wie dokładnie, jak przesłać domyślnie we wszystkich przeglądarkach. dane wejściowe staną się 'użytkownik [nazwa] = SOMETEXT & user [email] [email protected] --- jest to aplikacja hosta, która jest wymagana do obsługi dekodowania z powrotem do tablicy
Garet Claborn
Odpowiedzi:
156
To zależy od tego, co akceptuje serwer docelowy. Nie ma na to ostatecznego standardu. Zobacz też ao Wikipedia: Ciąg zapytania :
Chociaż nie ma ostatecznego standardu, większość platform internetowych umożliwia skojarzenie wielu wartości z jednym polem (np field1=value1&field1=value2&field2=value3.). [4] [5]
Ogólnie rzecz biorąc, gdy serwer docelowy używa silnego języka programowania, takiego jak Java ( Servlet ), możesz po prostu wysłać je jako wiele parametrów o tej samej nazwie. API zwykle oferuje dedykowaną metodę uzyskiwania wartości wielu parametrów w postaci tablicy.
A gdy serwer docelowy używa słabego języka typowanego , takiego jak PHP lub RoR, musisz dodać przyrostek do nazwy parametru nawiasami klamrowymi [], aby język zwrócił tablicę wartości zamiast pojedynczej wartości.
Zwróć uwagę, że wysyłając foo[]=value1&foo[]=value2&foo[]=value3do serwletu Java, nadal możesz je uzyskać, ale musisz użyć dokładnej nazwy parametru, w tym nawiasów klamrowych.
gdy serwer używa nodeJs, możesz po prostu przekazać tablicę jako foo = [wartość1, wartość2, wartość3]. Gdy uzyskasz to wewnątrz trasy ekspresowej z req.query, otrzymasz {foo: '[wartość1, wartość2, wartość3]'}. Wystarczy go przeanalizować i użyć tej tablicy w swoim kodzie
Akshay Barpute
co za bzdury, pisanie językowe nie ma z tym nic wspólnego
omnomnom
To jest rzeczywiście nieokreślone. Właśnie dlatego odpowiedź brzmi „Ogólnie”. W językach z silną typizacją przyrostki nawiasów []w nazwach parametrów żądania nie są interpretowane w taki sam sposób, jak w językach ze słabymi typami. Został pierwotnie wprowadzony jako wewnętrzne obejście dla słabo typowanych języków, aby móc stworzyć zamierzony typ zmiennej. PHP był pierwszym, który to zrobił.
BalusC
To nie uogólnia. Nawiasy są konwencją krosowania Ruby on Rails do kodowania zagnieżdżonej struktury w płaską sekwencję. Zope (Python framework) użył innego schematu dla tego samego przypadku użycia . Te schematy zostały w większości przestarzałe przez AJAX i JSON. Pomysł, że powinno to zostać uogólnione na systemy typów, jest bardzo daleko idący , szczerze mówiąc.
Martijn Pieters
Mówiąc inaczej: problem polega na tym, że ciąg zapytania nie zawiera informacji o typie, a nie to, że język analizujący ciąg zapytania jest napisany słabo. PHP i Ruby nie wymagają dodatkowych nawiasów, aby akceptować wiele wartości dla tej samej nazwy.
Martijn Pieters
187
Wiem, że ten post jest naprawdę stary, ale muszę odpowiedzieć, ponieważ chociaż odpowiedź BalusC jest oznaczona jako poprawna, nie jest całkowicie poprawna.
Musisz napisać zapytanie dodając "[]" do foo w ten sposób:
Cieszę się, że odpowiedziałeś na ten stary post! To zdecydowanie pomogło.
Tha Leang
@BalusC niepoprawne, działa to doskonale w C / C ++ / C # (i może działać w Javie). Tylko użycie Javy powoduje, że identyczne nazwy są interpretowane jako takie. Twoja odpowiedź to nieprawidłowe użycie formatowania URI
Garet Claborn
@GaretClaborn nie jestem pewien, co próbujesz powiedzieć, ale ta odpowiedź działa dla mnie
<input name="user[name]" /> <input name="user[email]" />
wewnątrz<form>
kontenera wie dokładnie, jak przesłać domyślnie we wszystkich przeglądarkach. dane wejściowe staną się 'użytkownik [nazwa] = SOMETEXT & user [email] [email protected] --- jest to aplikacja hosta, która jest wymagana do obsługi dekodowania z powrotem do tablicyOdpowiedzi:
To zależy od tego, co akceptuje serwer docelowy. Nie ma na to ostatecznego standardu. Zobacz też ao Wikipedia: Ciąg zapytania :
Ogólnie rzecz biorąc, gdy serwer docelowy używa silnego języka programowania, takiego jak Java ( Servlet ), możesz po prostu wysłać je jako wiele parametrów o tej samej nazwie. API zwykle oferuje dedykowaną metodę uzyskiwania wartości wielu parametrów w postaci tablicy.
String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]
request.getParameter("foo")
Będzie również działać na nim, ale będzie to powrót tylko pierwszą wartość.String foo = request.getParameter("foo"); // value1
A gdy serwer docelowy używa słabego języka typowanego , takiego jak PHP lub RoR, musisz dodać przyrostek do nazwy parametru nawiasami klamrowymi
[]
, aby język zwrócił tablicę wartości zamiast pojedynczej wartości.$foo = $_GET["foo"]; // [value1, value2, value3] echo is_array($foo); // true
Jeśli nadal używasz
foo=value1&foo=value2&foo=value3
, zwróci tylko pierwszą wartość.$foo = $_GET["foo"]; // value1 echo is_array($foo); // false
Zwróć uwagę, że wysyłając
foo[]=value1&foo[]=value2&foo[]=value3
do serwletu Java, nadal możesz je uzyskać, ale musisz użyć dokładnej nazwy parametru, w tym nawiasów klamrowych.String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
źródło
[]
w nazwach parametrów żądania nie są interpretowane w taki sam sposób, jak w językach ze słabymi typami. Został pierwotnie wprowadzony jako wewnętrzne obejście dla słabo typowanych języków, aby móc stworzyć zamierzony typ zmiennej. PHP był pierwszym, który to zrobił.Wiem, że ten post jest naprawdę stary, ale muszę odpowiedzieć, ponieważ chociaż odpowiedź BalusC jest oznaczona jako poprawna, nie jest całkowicie poprawna.
Musisz napisać zapytanie dodając "[]" do foo w ten sposób:
źródło