如何使用Restangular通过GET方法发送参数数组

27

我需要通过get参数在API中发送一个过滤器数组,类似于这样:

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

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

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

实际发送的查询是

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

如何发送实际数组? 我是否应该考虑替代方案?


出于好奇,您在哪里或如何查看查询输出? - Dan Jimenez
@Dan Jimenez 在任何网页浏览器的开发者工具中找到“网络”选项卡 :) 这样就可以解决问题了。 - Diosney
4个回答

19

我找到了一种方法来做到这一点,我必须迭代过滤器对象以创建一个新对象,并在名称中使用[]:

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

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

产品:

&filters%5Bnickname%5D=test

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


11

试试这个:

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

1
这个答案是正确的 - 使用 Restangular 1.4.0 和嵌套数组参数没有被转换成正确的 http 查询字符串。您能够让上面的代码工作吗? - Stan Bondi

7

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

假设您只有少量的过滤器:

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

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

我希望您能从中受益。

你的示例救了我的一天 :) 谢谢 - Diosney

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

即,例如。
?endkey=["Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e",{}]&startkey=["Forum-03fa10f4-cefc-427a-9d57-f53bae4a0f7e"]

感谢您的发布,这是解决此问题最直接的方法 :) - Rebekah Waterbury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接