Wyślij tablicę za pomocą polecenia HTTP Get


99

Jak mogę wysłać tablicę z żądaniem HTTP Get?

Używam klienta GWT do wysyłania żądania.


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] =SOME@TEXT.com --- 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.

foo=value1&foo=value2&foo=value3
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[]=value1&foo[]=value2&foo[]=value3
$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[]=value3do 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]

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:

foo[]=val1&foo[]=val2&foo[]=val3

5
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
— FlowUI. SimpleUITesting.com
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.