我需要使用$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})
)
答案 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)
{
}