AngularJS:通过$ resource使用数组类型参数发送请求(复选框,多选等)

时间:2013-03-29 20:28:43

标签: angularjs angular-resource angularjs-controller

当我的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

非常感谢您的帮助。

托马斯

2 个答案:

答案 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"
        }
    }
);