4

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

非常感谢您的帮助。

托马斯

4

2 回答 2

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 请求中。

在这个问题的答案中提到了类似的解决方案: https ://stackoverflow.com/a/18322252/1866964

于 2013-12-13T05:47:21.320 回答
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 提供者非常相似:

$resource('api/api.asp', {}, {
    get: {
        method: 'GET',
        params: {
            client_status: ["CLIENT_STATUS_FORMER", "CLIENT_STATUS_ACTIVE"],
            client_reference: "e"
        }
    }
);
于 2013-04-11T05:21:56.220 回答