【问题标题】:Disabling Angular $http.get URL encoding for query parameters为查询参数禁用 Angular $http.get URL 编码
【发布时间】:2014-11-15 13:16:34
【问题描述】:

我正在使用 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"

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

【问题讨论】:

    标签: python angularjs url-encoding flask-restless


    【解决方案1】:

    更新答案:

    默认情况下,如果参数值是对象,Angular 会将其字符串化。
    因此,只需传递 queryObject,它就会为您完成所有必要的工作:

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

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

    这可能不是由 Angular 完成的,而是由您的浏览器本身完成的。
    (例如,尝试对相同的 URL 进行简单的 XHR 并在 DevTools 的 Network 面板中插入请求。)

    我对 Flask 不熟悉,但是(如果它不自动解码查询参数)它应该有一种方法可以手动完成。

    【讨论】:

    • 即使在字符串化之后,服务器仍将请求显示为 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:其实我错了,你不需要把自己串起来。它是浏览器将查询参数编码为 URI 组件。每个请求都会发生这种情况,Flusk 应该能够处理它。
    • 谢谢@ExpertSystem,你是对的。看起来我只是犯了一个愚蠢的错误,即在使用 LIKE 运算符时没有将搜索字符串包装在 %% 中。
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多