我使用Angular的$http.get()
方法查询我的API:
var arr = ['foo','bar'];
return $http.get("api/foo", {
params: { sampleids: arr}
});
这会导致对/api/foo?sampleids=115&sampleids=116
的请求正常工作。但是,如果我将数组的大小减小为单个元素,它将变为/api/foo?sampleids=115
,express (node.js) fails to interpret as an array。
如果Angular将查询发送为/api/foo?sampleids[]=115
,则应该可以正常工作。我有什么方法可以告诉它这样做吗?
答案 0 :(得分:1)
您可以在请求配置中使用paramSerializer
属性来自定义参数对象如何转换为字符串。
return $http.get("api/foo", {
params: { myArray: arr},
paramSerializer: function (params) {
// Return a string...
}
});
如果您不确定如何序列化对象,可以在此处查看默认实现:https://github.com/angular/angular.js/blob/master/src/ng/http.js#L27。
此外,如果您提供字符串而不是函数,它将查找具有该名称的服务 - 如果您想重用它,这可能会有所帮助。默认情况下提供了$httpParamSerializerJQLike
服务,它以与jQuery' param()
函数相同的格式对它们进行序列化。
答案 1 :(得分:0)
如何最好地将数组实现为参数似乎存在一些不确定性。
您可以尝试使用JSON.stringify:
var arr = ['foo','bar'];
$http(
method: 'GET',
url: 'api/foo',
params: {
arr: JSON.stringify(arr)
})
或者简单地说:
var arr = ['foo','bar'];
$http(
method: 'GET',
url: 'api/foo',
params: {
"arr[]": arr
})
您可能会发现此SO article有用