Jak mogę wysłać tablicę z żądaniem HTTP Get?
Używam klienta GWT do wysyłania żądania.
Odpowiedzi:
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[]=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]
[]
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:
foo[]=val1&foo[]=val2&foo[]=val3
<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