簡體   English   中英

使用AngularJS'$ http服務通過GET請求發送數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM