2016-01-19 3 views
1

Я использую угловой 1.4.8, и есть ошибка с вещью с параметром encode в запросе get.угловое пространство пробела как + не% 20

Это моя служба:

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 

Почему угловой неправильно кодировать этот параметр? Как исправить эту проблему?

+0

параметры GET не предназначены для работы с пробелами. Я бы использовал два поля: sortField и sortType – Serginho

+0

Попробуйте добавить 'transformRequest: []' в определение 'get'. Это должно гарантировать, что с запросом не произойдет нежелательных преобразований. – jim0thy

+0

Вы не можете просто расшифровать параметр на сервере? – charlietfl

ответ

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.

+1

Почему вы говорите, что он не кодируется по умолчанию? Он делает внутренне – charlietfl

+0

Когда я делаю это, как вы говорите, у меня есть: '' 'http: // localhost: 3000/api/users? Page = 0 & size = 10 & sort = email% 2520asc''' – luckybastard

+0

@charlietfl - можете ли вы уточнить ? Я не вижу какой-либо кодировки в моем приложении, если я не укажу его вручную. –

Смежные вопросы