当我的GET参数中有一个复选框(client_status)数组时,我在使用AngularJS中的$ resource库发送正确序列化的GET请求时遇到问题。
这是我现在在控制器中的代码:
$scope.filters = {
client_status: ["CLIENT_STATUS_FORMER", "CLIENT_STATUS_ACTIVE"],
client_reference: "e"
}
$scope.records = Client.get($scope.filters, function(data){
...
}
以上将发送以下GET请求:
f.json?client_reference=e&client_status=CLIENT_STATUS_FORMER,CLIENT_STATUS_ACTIVE
但是,据我所知,上面看起来似乎不是正确的格式。有人可以指导我一点吗?以下是我的期望:
f.json?client_reference=e&client_status%5B%5D=CLIENT_STATUS_ACTIVE&client_status%5B%5D=CLIENT_STATUS_FORMER
非常感谢您的帮助。
托马斯
答案 0 :(得分:3)
您可以使用$ resource完成此操作,方法是将client_status更改为'client_status []',如下所示:
$scope.filters = {
'client_status[]': ["CLIENT_STATUS_FORMER", "CLIENT_STATUS_ACTIVE"],
client_reference: "e"
}
我为此创建了一个plunker:http://plnkr.co/edit/QXIaY8XlMUfOy7RNMKKv?p=info
我在其中放置了一个虚拟URL,因此如果您在运行plunker时使用Firebug或Chrome开发工具,您将看到http://example.com/api的请求显示正确添加[]到GET请求中。 / p>
在这个问题的答案中注意到类似的解决方案: https://stackoverflow.com/a/18322252/1866964
答案 1 :(得分:0)
以下是我对$ http提供程序的处理方式:
$http({
url:'api/api.asp',
method: 'GET',
params: {
client_status: ["CLIENT_STATUS_FORMER", "CLIENT_STATUS_ACTIVE"],
client_reference: "e"
}
}).then(function (result) {
$scope.test = result.data;
});
对服务器的调用变为:
api/api.asp?client_reference=e&client_status=%5B%22CLIENT_STATUS_FORMER%22%2C%22CLIENT_STATUS_ACTIVE%22%5D
在服务器上(这是经典的asp vbscript):
<%
Response.Write Request.QueryString("client_status")
%>
显示:
["CLIENT_STATUS_FORMER","CLIENT_STATUS_ACTIVE"]
你可以将它用作普通数组。
编辑:它与$ resource provider非常相似:
$resource('api/api.asp', {}, {
get: {
method: 'GET',
params: {
client_status: ["CLIENT_STATUS_FORMER", "CLIENT_STATUS_ACTIVE"],
client_reference: "e"
}
}
);