Как я могу отправить массив с HTTP-запросом Get?
Я использую клиент GWT для отправки запроса.
Ответы:
Это зависит от того, что принимает целевой сервер. Для этого нет окончательного стандарта. См. Также ao Wikipedia: Строка запроса :
Хотя окончательного стандарта не существует, большинство веб-фреймворков позволяют связывать несколько значений с одним полем (например,
field1=value1&field1=value2&field2=value3
). [4] [5]
Как правило, когда целевой сервер использует язык программирования со строгой типизацией, такой как Java ( сервлет ), вы можете просто отправить их как несколько параметров с одинаковым именем. API обычно предлагает специальный метод для получения значений нескольких параметров в виде массива.
foo=value1&foo=value2&foo=value3
String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]
Он request.getParameter("foo")
также будет работать с ним, но вернет только первое значение.
String foo = request.getParameter("foo"); // value1
И, когда целевой сервер использует язык со слабой типизацией, такой как PHP или RoR, вам необходимо добавить к имени параметра суффикс фигурных скобок []
, чтобы язык возвращал массив значений вместо одного значения.
foo[]=value1&foo[]=value2&foo[]=value3
$foo = $_GET["foo"]; // [value1, value2, value3]
echo is_array($foo); // true
Если вы все еще используете foo=value1&foo=value2&foo=value3
, он вернет только первое значение.
$foo = $_GET["foo"]; // value1
echo is_array($foo); // false
Обратите внимание, что когда вы отправляете foo[]=value1&foo[]=value2&foo[]=value3
сервлету Java, вы все равно можете их получить, но вам нужно будет использовать точное имя параметра, включая фигурные скобки.
String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
[]
в скобках в именах параметров запроса интерпретируются иначе, чем в языках со слабой типизацией. Первоначально он был введен как внутреннее решение для языков со слабой типизацией, чтобы иметь возможность создавать предполагаемый тип переменной. PHP был первым, кто сделал это.
Я знаю, что этот пост действительно старый, но я должен ответить, потому что, хотя ответ BalusC отмечен как правильный, он не совсем правильный.
Вы должны написать запрос, добавляющий «[]» в foo, вот так:
foo[]=val1&foo[]=val2&foo[]=val3
<input name="user[name]" /> <input name="user[email]" />
внутри<form>
контейнера точно знает, как отправить по умолчанию во всех браузерах. входные данные станут ʻuser [name] = SOMETEXT & user [email] =SOME@TEXT.com --- это хост-приложение, которое требуется для обработки декодирования обратно в массив