Ответ 1
$http(
method: 'GET',
url: '/items',
params: {
id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
}
)
Мне нужно отправить запрос GET с помощью службы $http
. Одним из параметров будет массив идентификаторов. URL-адрес выглядит так: mysite.com/items?id [] = 1 & id [] = 2 & id [] = 3 & id [] = 4
Я пробовал этот подход
$http(
method: 'GET',
url: '/items',
params: {
id: ids // ids is [1, 2, 3, 4]
}
)
но url я obain - mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D
Это потому, что Angular преобразует мое значение в строку JSON. Есть ли способ получить поведение, которое я хочу?
[Обновление]
Я решил проблему благодаря предложению Джонатана, используя jQuery $.param()
.
$http(
method: 'GET'
url: '/items?' + $.param({id: ids})
)
$http(
method: 'GET',
url: '/items',
params: {
id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
}
)
Вы также можете просто сделать
$http(
method: 'GET',
url: '/items',
params: {
"id[]": ids // ids is [1, 2, 3, 4]
}
)
как упоминалось здесь. Кажется проще.
jQuery - это здорово, но если вы добавляете jQuery только для этого, вы, вероятно, можете сделать это с помощью метода не jQuery и сэкономить драгоценные байты.
Способ не jQuery:
$http(
method: 'GET',
url: '/items',
params: {
id: ids.toString() //convert array into comma separated values
}
)
На сервере преобразуйте его обратно в массив.
Eg. в php
$ids = explode(',',Input::get('ids'));
//now you can loop through the data like you would through a regular array.
foreach($ids as $id)
{
//do something
}
Это действительно, просто расшифруйте его на своем сервере. Почти все бэкэнд-языки имеют способ декодирования URI. Если вам не нравится способ сериализации Angular, вы можете попробовать jquery $.param().
вы можете использовать $httpParamSerializer или $httpParamSerializerJQLike
$http({
method: 'GET',
url: '/items',
data: $httpParamSerializer({'id':[1,2,3,4]}),
})
Параметр paramSerializer может быть установлен для репликации метода сериализации jQuery:
$http({
url: myUrl,
method: 'GET',
params: myParams,
paramSerializer: '$httpParamSerializerJQLike'
});
Пока у вас слишком много идентификаторов, что приведет к тому, что ваш URL-адрес запроса будет слишком длинным, в зависимости от вашей конфигурации, следующее решение будет работать...
Angular Сервис:
$http.get("website.com/api/items?ids=1&ids=2&ids=3");
Контроллер WebApi
[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}