Invia un array con un HTTP Get


95

Come posso inviare un array con una richiesta Get HTTP?

Sto utilizzando il client GWT per inviare la richiesta.


davvero, l'HTML è migliore per illuminare questo. <input name="user[name]" /> <input name="user[email]" />all'interno di un <form>contenitore sa esattamente come inviare per impostazione predefinita in tutti i browser. gli input diventeranno `user [name] = SOMETEXT & user [email] =SOME@TEXT.com --- è l'applicazione host richiesta per gestire la decodifica in un array
Garet Claborn

Risposte:


153

Dipende da cosa accetta il server di destinazione. Non esiste uno standard definitivo per questo. Vedi anche ao Wikipedia: Stringa di query :

Sebbene non esista uno standard definitivo, la maggior parte dei framework Web consente di associare più valori a un singolo campo (ad esempio field1=value1&field1=value2&field2=value3). [4] [5]

In genere, quando il server di destinazione utilizza un linguaggio di programmazione fortemente tipizzato come Java ( Servlet ), è possibile semplicemente inviarli come più parametri con lo stesso nome. L'API di solito offre un metodo dedicato per ottenere più valori di parametri come array.

foo=value1&foo=value2&foo=value3
String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]

Il request.getParameter("foo")sarà anche lavorare su di esso, ma tornerà solo il primo valore.

String foo = request.getParameter("foo"); // value1

E, quando il server di destinazione utilizza un linguaggio di digitazione debole come PHP o RoR, è necessario aggiungere il suffisso al nome del parametro con parentesi graffe []per attivare la lingua per restituire un array di valori invece di un singolo valore.

foo[]=value1&foo[]=value2&foo[]=value3
$foo = $_GET["foo"]; // [value1, value2, value3]
echo is_array($foo); // true

Nel caso in cui lo usi ancora foo=value1&foo=value2&foo=value3, restituirà solo il primo valore.

$foo = $_GET["foo"]; // value1
echo is_array($foo); // false

Tieni presente che quando invii foo[]=value1&foo[]=value2&foo[]=value3un servlet Java, puoi comunque ottenerli, ma dovresti usare il nome esatto del parametro comprese le parentesi graffe.

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]

quando il server usa nodeJs, puoi semplicemente passare array come foo = [value1, value2, value3]. Quando ottieni questo percorso espresso interno con req.query, otterrai {foo: '[value1, value2, value3]'}. Devi solo analizzarlo e usare questo array nel tuo codice
Akshay Barpute

184

So che questo post è davvero vecchio, ma devo rispondere perché sebbene la risposta di BalusC sia contrassegnata come corretta, non è completamente corretta.

Devi scrivere la query aggiungendo "[]" a pippo in questo modo:

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

5
Sono contento che tu abbia risposto a questo vecchio post! Sicuramente ha aiutato.
Tha Leang

@BalusC non corretto, funziona perfettamente in C / C ++ / C # (e può funzionare in java). È solo l'utilizzo di Java che causa l'interpretazione di nomi identici come tali. Tuttavia, la tua risposta è un utilizzo errato della formattazione URI
Garet Claborn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.