使用AngularJS'$ http服务通过GET请求发送数组

时间:2013-11-13 15:32:58

标签: javascript http angularjs angular-http

我需要使用$http服务发送GET请求。其中一个参数是一组id。网址看起来像这样 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]
  }
)

但我记下的网址是 mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D

因为Angular正在JSON字符串中转换我的值。有没有办法得到我想要的行为?

[更新]

由于Jonathan建议使用jQuery' $.param(),我解决了这个问题。

$http(
  method: 'GET'
  url: '/items?' + $.param({id: ids})
)

7 个答案:

答案 0 :(得分:76)

您也可以这样做

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

如上所述here。似乎更简单。

答案 1 :(得分:61)

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

答案 2 :(得分:10)

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
}

答案 3 :(得分:5)

这是有效的,只需在后端解码即可。几乎所有后端语言都有解码URI的方法。如果你不喜欢Angular序列化它的方式,你可以试试jquery的$ .param()。

答案 4 :(得分:1)

你可以使用$ httpParamSerializer或$ httpParamSerializerJQLike

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

答案 5 :(得分:1)

The paramSerializer option can be set to replicate jQuery's serialization method

$http({
  url: myUrl,
  method: 'GET',
  params: myParams,
  paramSerializer: '$httpParamSerializerJQLike'
});

答案 6 :(得分:0)

只要您没有太多的ID,这会导致您的请求网址太长,具体取决于您的配置,以下解决方案将有效...

Angular Service:

$http.get("website.com/api/items?ids=1&ids=2&ids=3");

WebApi控制器

[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}
相关问题