27

我必须通过 API 中的 get 参数发送一组过滤器,如下所示:

/myList?filters[nickname]=test&filters[status]=foo

现在,如果我像这样直接发送一个对象:

Restangular.one('myList').get({filters: {
    nickname: 'test',
    status: 'foo'
}});

真正发送的查询是

?filters={"nickname":"test","status":"foo"}

如何发送一个真正的数组?我应该考虑替代方案吗?

4

4 回答 4

19

我找到了一种方法,我必须遍历过滤器对象以创建一个名称中带有 [] 的新对象:

var query = {};
for (var i in filters) {
    query['filters['+i+']'] = filters[i];
}

Restangular.one('myList').get(query);

生产:

&filters%5Bnickname%5D=test

有人有更好的解决方案吗?

于 2013-08-26T15:08:18.820 回答
11

尝试这个:

Restangular.all('myList').getList({filters: {
    nickname: 'test',
    status: 'foo'
}});
于 2013-12-30T13:07:31.537 回答
7

使用 JSON 对内容进行字符串化

{
  "startkey": JSON.stringify(["Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e"]),
  "endkey": JSON.stringify(["Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e", {}]),
}

翻译成

?endkey=%5B"Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e",+%7B%7D%5D&startkey=%5B"Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e"%5D

IE

?endkey=["Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e",{}]&startkey=["Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e"]
于 2014-02-20T02:47:59.033 回答
7

如果您的参数很少且受控参数,则可以使用这种方式。

假设您的过滤器很少:

    var api = Restangular.all('yourEntityName');
    var params = {  commonWay          : 'value1',
                   'filter[property1]' : filterVariable1,
                   'filter[property2]' : filterVariable2
                 };

    api.getList(params).then(function (data) {
        alert(data);
    });

我希望这对你有帮助。

于 2014-01-15T21:28:20.430 回答