我试图将数组从AngularJS传递给我们的API。但是,发送后,参数将重复而不是作为数组发送。这是我的代码:
angular.module('sigApp.services', ['ngResource']).
// Fetch cases from server
service('caseFetcher', ['$resource', function($resource) {
this.getCases = function(params) {
console.log('params: ',params);
return $resource('/v1/cases/', params);
};
}]);
这是生成的URL(缩写):/v1/cases?status = OPEN&status = HELD
这是我想要的URL:/v1/cases?status%5B0%5D = OPEN&status%5B1%5D = HELD(又名?status [0] = OPEN&status 1 = HELD)
这是上面的代码中记录的对象的屏幕截图:
我尝试了最新版本的angularjs(1.2rc1),还尝试了Restangular插件。不管我尝试什么,我都会多次传递参数,而不是以数组格式传递。我们的API不能使用同一个键处理多个值。
有任何想法吗?
编辑:当另一个问题(AngularJS: ngResource and array of object as params to URL)根本不像这样时,有人将其标记为重复。另一个问题涉及通过POST发送数组,而我正在尝试执行GET请求(默认情况下设置为isArray:true),并且我只希望将数组中的一个参数传递为,这个答案似乎并没有帮我。那么有人可以帮忙吗?
更新我在下面回答了我自己的问题,但如已评论,我将为遇到此问题的任何人提供更多信息。我们正在后端使用Play Framework 2.1。我无法生成上面最初发布的带编号的数组,但能够使其仅在未索引的数组中工作,因此生成的URL最终可以工作:
/v1/cases?status%5B%5D = OPEN&status%5B%5D = HELD(又名?status [] = OPEN&status [] = HELD)
希望这对别人有帮助
最佳答案
我通过更改传递给$ resource的参数的设置方式解决了自己的问题。代替:
$scope.params.status = ['OPEN','HELD'];
我用了:
$scope.params["status[]"] = ['OPEN','HELD'];
这使我能够根据需要检索服务器上的值。
关于AngularJS $ resource-无法将数组作为参数之一传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18318714/