Как передать массив в get запросе
Перейти к содержимому

Как передать массив в get запросе

  • автор:

Как передать массив в get запросе

(0) Если нужно передавать массив, то нужно делать POST запрос. И в теле запроса уже передавать что хочешь.

Если в документации написано, что используется GET-запрос, то все равно можно сделать POST запрос?
(0) приведи строку запроса.
Иногда сервер понимает так: ?filter[ids]=1&filter[ids]=2

(4) Ну. Тогда в документации должно быть указано за то «как в запросе GET указать параметр запроса типа массив?»

не указано это в документации. Написано только тип параметра массив
(3) Можно и через GET, если массив не большой и вместится в 4кб
(4) Вряд ли
(10) что смысл?
(11) в запросе GET указать параметр запроса типа массив
(12) в документации указано, что запрос GET и параметр массив
можеть быть как
&filter=[1, 2, 3]
(13) ты к 1с подключаешься?
нет, не к 1с. Надо с сайта получить данные
(16) АдресСтраницы = «твой сайт/hs/твой хттп сервис /твой массив
(16) массивы я помню в пхп легко передаются в параметрах, только их нужно правильно создать
(13) приведи фрагмент документации или ссылку на всю
(16) Ты главное не говори что за сайт и какой запрос ты хочешь отправить

Фильтр = Новый Массив;
Фильтр.Добавить(1);
Фильтр.Добавить(3);

ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить(«filter», Фильтр);

Как передать массив в get запросе

В прошлых темах была рассмотрена отправка на сервер отдельных значений. Однако отправка набора значений, то есть массивов в PHP может вызвать некоторые сложности. Рассмотрим, как можно отправить на сервер и соответственно получить на сервере массивы данных.

Например, определим следующий файл users.php :

 echo "В массиве " . count($users) . " элементa/ов
"; foreach($users as $user) echo "$user
"; ?>

В данном случае мы предполагаем, что параметр «users», который передается в запросе типа GET, будет представлять массив. И соответствено мы сможем получить из него данные.

Чтобы передать массив этому скрипту, обратимся к нему со следующим запросом:

http://localhost/users.php?users[]=Tom&users[]=Bob&users[]=Sam

Чтобы определить параметр строки запроса как массив, после названия параметра указываются квадраные скобки []. Затем мы можем присвоить некоторое значение: users[]=Tom . И сколько раз подобным образом будет присвоено значений, столько значений и будет в массиве. Все значения, как и обычно, отделяются амперсандом. Так, в данном случае в массив передаются три значения.

Передача массивов в PHP на сервер в запросе GET

Подобным образом мы можем отправлять данные в запросе POST из формы. Например, определим следующий скрипт:

   METANIT.COM  "; foreach($users as $user) echo "$user
"; > ?>

Форма ввода данных

User 1:

User 2:

User 3:

Как известно, название ключа передаваемых на сервер данных соответствует значению атрибута name у элемента формы. И чтобы указать, что какое-то поле ввода будет поставлять значение для массива, у атрибут name поля ввода в качестве значения принимает название массива с квадратными скобками:

Соответственно, сколько полей ввода с одним и тем же именем массива мы укажем, столько значений мы сможем передать на сервер. Так, в данном случае на сервер передается три значения в массиве users:

Отправка массивов на сервер методом POST из формы в PHP

Причем данный принцип применяется и к другим типам полей ввода формы html.

При этом в примерах выше передавался обычный массив, каждый элемент которого в качестве ключа имеет числовой индекс. Соотвенно, используя индекс, мы можем получить определенный элемент массива:

$firstUser = $_POST["users"][0]; echo $firstUser;

Но также мы можем в элементах формы явным образом указать ключи:

   METANIT.COM  $secondUser
$thirdUser"; > ?>

Форма ввода данных

User 1:

User 2:

User 3:

Например, первое поле добавляет в массив элемент с ключом «first»

Поэтому на сервере мы можем с помощью данного ключа получить соответствующий элемент:

$firstUser = $_POST["users"]["first"];

Как передать массив как параметр строки GET-запроса в Java (Spring)?

Цель — сделать api более RESTful. Для получения ресурсов должен использоваться метод GET, но для получения списка ресурсов в контроллер должен передаваться фильтр такого вида:

@Data public class Filter < private int limit; private Listsort; public Filter(int limit, List sort) < this.limit = limit; this.sort = sort; >> 
@Data public class Sort

Из-за наличия списка List внутри фильтра, возникают проблемы с получением его в контроллере. Тщательно изучив мануал и вопрос на тему передачи объектов в строке GET-запроса, мне так и не удалось добиться успеха. По-прежнему неясно, в каком виде надо передать массив с клиента, и что сделать на сервере, чтобы он его увидел как список (происходят разного вида ошибки при маппинге фильтра). Использую такую стратегию (для получения всего, кроме списка): Контроллер:

@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public List getList(@RequestParam("filter") String filterJson) < ObjectMapper mapper = new ObjectMapper(); Filter filter = null; try < filter = mapper.readValue(filterJson, Filter.class); >catch (IOException e) < e.printStackTrace(); >return getSomeDtos(filter); > 

Запрос с клиента:

http://localhost:3000/some-api?filter=%7B%22limit%22:10,%22sort%22:null%7D 

Уважаемые знатоки, вопрос — в каком виде надо передать List<> в фильтре в строке GET-запроса?

Курсы javascript

Здравствуйте. У меня на сайте есть фильтр, который работает без перезагрузки страницы. Мне хочется, чтобы в случае перезагрузки — данные формы сохранились. Я так поняла, мне нужно просто параллельно у пользователя менять его url с параметрами фильтра. В итоге я имею примерно вот такой массив:

< filtr: "_created", status: , limit: 8 >

Подскажите, как его преобразовать, чтобы потом сделать вот такое?

history.pushState(null, null, '/adm?'+array);

и обработать его потом на php.
15.06.2021, 09:44
Регистрация: 19.08.2010
Сообщений: 14,091

< filtr: "_created", status: , limit: 8 >
history.pushState(null, null, '/adm?'+array);
const obj = < filtr: "_created", status: ["Принят", "Отклонён", "Завершён"], limit: 8 >const str = JSON.stringify(obj) alert(str)

15.06.2021, 09:57
Регистрация: 03.02.2020
Сообщений: 2,512

let sp = new URLSearchParams(''); let par = < filtr: "_created", status: ["Принят", "Отклонён", "Завершён"], limit: 8 >; sp.append('filtr', par.filtr); for (const ps of par.status) < sp.append('status', ps); >sp.append('limit', par.limit); let url = '/adm?' + sp.toString(); console.log(url); // history.pushState(null, null, url)

16.06.2021, 12:18
Регистрация: 04.04.2020
Сообщений: 60

ksa,
Подскажите. У меня есть вот такой объект:

В js я делаю вот так:

history.pushState(null, null, '?'+JSON.stringify(res.post))

Адресная строка меняется на
ser.loc/adm/?

Потом я делаю в php print_r и получаю вот это:

Array ( [ Array ( ["В обработке","Принят"] => ) )

Что не так? Почему обрубается в php? Я не декожу $_GET, он его даже не дал раздекодить

Последний раз редактировалось nastya97core, 16.06.2021 в 12:21 .
16.06.2021, 12:33
Регистрация: 19.08.2010
Сообщений: 14,091
ser.loc/adm/?
ser.loc/adm/?data=

На сервере, получив значение переменной data, обрабатываешь то значение как можешь.

16.06.2021, 15:04
Регистрация: 04.04.2020
Сообщений: 60
ser.loc/adm/?data=

Теперь снова проблема: я хочу разобрать эту же строку.

Я пытаюсь достать из него этот json, но на такой запрос:

strGET = window.location.search.replace( '?filtr=', '');

я получаю кракозябры:

Разумеется распарсить я это никак не могу.

16.06.2021, 16:05
Регистрация: 19.08.2010
Сообщений: 14,091

Гугли как это делается в ПХП.

16.06.2021, 16:09
Регистрация: 19.08.2010
Сообщений: 14,091
Вот нечто похожее на декодирование УРЛ в ПХП.
https://www.php.net/manual/ru/function.urldecode.php
16.06.2021, 16:16
Регистрация: 27.05.2010
Сообщений: 33,009
nastya97core,
appending-array
16.06.2021, 20:06
Регистрация: 04.04.2020
Сообщений: 60

рони,
ksa,
Есть форма, её заполняют и она отправляется через Fetch formData.
Она отправляется на php и если результат положителен то она возвращает вместе с данными ещё и те данные сформированные formData в формате json.
Я их засовываю в URL

history.pushState(null, null, '?filtr='+JSON.stringify(res.post))

Проблема заключалась в том, что мне нужно по GET запросу заполнить форму (то есть восстановить значения до перезагрузки).

Короче говоря решение было вот в этой строке:

let objGet = JSON.parse(decodeURI(window.location.search.replace('?filtr=', ''))); // decodeURI()

Теперь ещё проблема. Как проверить, есть ли в window.location.search ?filtr= ? А то я пытаюсь распарить даже тогда, когда ничего в get нет и он ломает весь JS.

Последний раз редактировалось nastya97core, 16.06.2021 в 20:19 .

Страница 1 из 2 1 2 >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *