角度编码空间为+非%20

时间:2016-01-19 14:00:14

标签: angularjs angular-http

我正在使用角度1.4.8并且在get请求中有编码参数的bug。

这是我的服务:

   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

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

1 个答案:

答案 0 :(得分:0)

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

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.