禁用查询参数的Angular $ http.get URL编码

时间:2014-09-21 12:55:32

标签: python angularjs url-encoding flask-restless

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

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

(请参阅Flask-Restless查询文档here。)

当我使用Angular的$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"

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

1 个答案:

答案 0 :(得分:2)

更新的答案:

如果是一个对象,Angular将默认字符串化一个params值 因此,只需传递queryObject:

,它将为您完成所有必要的工作
var queryObject = {filters: [...]};
$http.get('...', {params: {q: queryObject}});

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

这可能不是由Angular完成的,而是由您的浏览器本身完成的 (例如,尝试在同一个URL上创建一个简单的XHR,并在DevTools的“网络”面板中阻止该请求。)

我不熟悉Flask,但是(如果它不会自动解码查询参数),它应该有一个方法来手动执行。