通过GET请求通过AngularJS的$ http服务发送数组

我需要使用$http服务发送GET请求。 其中一个参数将是一个ID数组。 该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] } ) 

但我obain的url是mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D

这是因为Angular正在将我的值转换为JSONstring。 有没有办法得到我想要的行为?

[更新]

我解决了这个问题,感谢Jonathan的build议,使用jQuery的$.param()

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

你也可以做

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

如这里所述 。 似乎更简单。

jQuery非常好,但是如果你只是为了添加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()。

paramSerializer选项可以设置为复制jQuery的序列化方法 :

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

你可以使用$ httpParamSerializer或$ httpParamSerializerJQLike

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

只要你没有太多的ID,这将导致你的请求URL太长,这取决于你的configuration,下面的解决scheme将工作…

有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) { }