2014-09-21 68 views
0

我正在使用Flask-Restless创建我的API,这需要使用过滤器对象列表对查询参数进行格式化。有效查询格式如下:

/api/person?q={"filters":[{"name":"firstName","op":"like","val":"Mike"}]} 

(见烧瓶不宁查询文档here

当我使用角的$http.get传递查询参数,它们被编码到URL,并打破该查询:

GET /api/person?q=%7B%22filters%22:%7B%22name%22:%22firstName%22,%22op%22:%22like%22,%22val%22:%22Mike%22%7D%7D HTTP/1.1" 

是否可以禁用全部或部分参数的编码?

回答

2

修订解答:默认

角意愿字符串化一个PARAMS值,如果它是一个对象。
因此,它将使所有必要的工作对你来说,只是通过将queryObject:

var queryObject = {filters: [...]}; 
$http.get('...', {params: {q: queryObject}}); 

你看到的是编码为URI组件的字符串化的对象。

这可能不是由Angular完成的,而是由您的浏览器本身完成的。
(例如尝试进行简单XHR相同的URL和昆虫在DevTools的网络面板的请求。)

我不熟悉的烧瓶中,但(如果它不自动解码的查询参数)它应该有一个手动的方法。

+0

即使在串联后,服务器也会将请求显示为 GET/api/person?q =%7B%22filters%22:%7B%22name%22:%22firstName%22,%22op%22:%22like% 22,%22val%22:%22Mike%22%7D%7D HTTP/1.1“ – Josh 2014-09-21 14:05:10

+0

@Josh:其实我错了,你不需要自己编写字符串,浏览器将查询参数编码为URI组件。 – gkalpak 2014-09-21 14:57:32

+0

感谢@ExpertSystem,你是对的,看起来我只是犯了一个愚蠢的错误,就是在使用LIKE运算符时没有在%%包装搜索字符串。 – Josh 2014-09-21 15:09:10