[英]Send array via GET request with AngularJS' $http service
我需要使用$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})
)
你也可以這樣做
$http(
method: 'GET',
url: '/items',
params: {
"id[]": ids // ids is [1, 2, 3, 4]
}
)
如這里提到的。 似乎更簡單。
$http(
method: 'GET',
url: '/items',
params: {
id: JSON.stringify(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
}
)
在您的服務器上將其轉換回數組。
例如。 在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'
});
只要您沒有太多的ID,這將導致您的請求URL太長,具體取決於您的配置,以下解決方案將起作用...
角度服務:
$http.get("website.com/api/items?ids=1&ids=2&ids=3");
WebApi控制器
[HttpGet, Route("api/items")]
public IEnumerable<Item> Get([FromUri] string[] ids)
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.