Отправить массив через запрос GET с помощью сервиса AngularJS '$ http - программирование
Подтвердить что ты не робот

Отправить массив через запрос GET с помощью сервиса AngularJS '$ http

Мне нужно отправить запрос 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})
)
4b9b3361

Ответ 1

$http(
  method: 'GET',
  url: '/items',
  params: {
    id: JSON.stringify(ids) // ids is [1, 2, 3, 4]
  }
)

Ответ 2

Вы также можете просто сделать

$http(
  method: 'GET',
  url: '/items',
  params: {
    "id[]": ids // ids is [1, 2, 3, 4]
  }
)

как упоминалось здесь. Кажется проще.

Ответ 3

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
}

Ответ 4

Это действительно, просто расшифруйте его на своем сервере. Почти все бэкэнд-языки имеют способ декодирования URI. Если вам не нравится способ сериализации Angular, вы можете попробовать jquery $.param().

Ответ 5

вы можете использовать $httpParamSerializer или $httpParamSerializerJQLike

$http({
  method: 'GET',
  url: '/items',
  data: $httpParamSerializer({'id':[1,2,3,4]}),
})

Ответ 7

Пока у вас слишком много идентификаторов, что приведет к тому, что ваш 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)
{
}