当我将数组传递给资源操作时...它不会将数组参数转换为URL参数数组
var Product = $resource('path/products');
Product.query({ids: [1,2,3]})
而不是得到:
path/products?ids[]=1&ids[]=2ids[]=3
我得到了:
path/products?ids=1&ids=2ids=3
任何人都知道如何解决这个问题?
答案 0 :(得分:22)
您可以使用$ resource传递数组
var searchRequest = $resource('/api/search/post', {}, {
'get': {method: 'GET'}
});
searchRequest.get({'ids[]':[1,2,3]});
然后你得到请求网址
/api/search/post?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3
您获得%5B%5D
而不是[]
如果您希望返回array
而不是object
,那么您应该使用
'get': {method: 'GET', isArray: true}
答案 1 :(得分:-1)
Params应该像这样声明
var Product = $resource('path/products?:ids',
{ids: '@ids'});
但是我不确定你想要实现的结果是什么。由于重复参数,OP方式中发布的任何一个都是无效请求。
坚持使用GET动词并在查询参数中定义一个数组我看到了唯一的方法:将param构造为一个字符串
var query = [1,2,3].map(function(el){return 'brand[]='+el}).join('&');
Product.query({ids: query});
PS 除非你有充分的理由,否则最好的方法是使用POST动词发送数组,如this post中所述。通过URL发送数组,您可以轻松地耗尽最大URL长度