【问题标题】:angular encode space as + not %20角度编码空间为 + 而不是 %20
【发布时间】:2016-04-25 01:02:20
【问题描述】:

我正在使用 Angular 1.4.8,并且在获取请求中存在编码参数的错误。

这是我的服务:

   angular
        .module('test')
        .factory('User',User);

    /* @ngInject */
    function User($resource) {
        return $resource('api/users/:login', {}, {
            'query': {method: 'GET', isArray: false},
            'get': {
                method: 'GET',
                transformResponse: function (data) {
                    data = angular.fromJson(data);
                    return data;
                }
            },
            'save': {method: 'POST'},
            'update': {method: 'PUT'},
            'delete': {method: 'DELETE'}
        });
    }

当我使用它时:

     return User.get({
                        page: 1,
                        size: 20,
                        sort: 'email asc'  //THIS IS A PROBLEM
                    }
                    ).$promise.then(function (data, headersGetter) {

                       return data.content;
                    });

我的要求是:

http://localhost:3000/api/users?page=0&size=10&sort=email+asc

但它应该看起来像:

http://localhost:3000/api/users?page=0&size=10&sort=email%20asc

为什么角度没有正确编码该参数? 如何解决这个问题?

【问题讨论】:

  • GET 参数不适用于空格。我会使用两个字段:sortField 和 sortType
  • 尝试将transformRequest: [] 添加到“获取”定义中。这应该确保请求不会发生不需要的转换。
  • 你不能只解码服务器上的参数吗?
  • 我不管理服务器,所以我无法更改实现
  • @jim0thy 我按照你说的添加:'get': { method: 'GET', transformRequest: [], transformResponse: function (data) { data = angular.fromJson(data); return data; } }, 它仍然无法正常工作,我有 + 符号

标签: angularjs angular-http


【解决方案1】:

如果需要,您可以手动编码。 试试这个:

sort: encodeURIComponent('email asc')

或者更好的是,将整个完成的 url 字符串包装在 encodeURIComponent 中。

请注意,url 参数中的空格无效。编码将在空间所在的位置添加 %2520。

See this question asking/explaining reason for %2520 instead of %20

See this other question and the answer quoting the RFC.

【讨论】:

  • 为什么说默认不编码呢?它在内部进行
  • 当我按照你说的那样做时:http://localhost:3000/api/users?page=0&size=10&sort=email%2520asc
  • @charlietfl - 你能详细说明一下吗?除非我手动指定,否则我的应用程序中看不到任何编码。
  • GET 参数在序列化时进行编码。查看角度源github.com/angular/angular.js/blob/master/src/ng/http.js#L26
  • @charlietfl - 你绝对是对的,但在我的应用程序中,我看不到许多字符的编码。不知道为什么。我会改变我的答案。
猜你喜欢
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多