2016-01-19 35 views
1

我正在使用angular 1.4.8,並且在獲取請求時存在編碼參數中的錯誤。角編碼空間爲+不是%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') 

或者更好的是,包裹在encodeURIComponent方法對整個成品URL字符串。

請注意,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 - 能否詳細說明?除非手動指定,否則我的應用程序中沒有發現任何編碼。 –

相關問題