通过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) { }