在角度JS中使用uri参数中的'斜杠'字符来使用一个宁静的服务

时间:2016-01-25 07:00:49

标签: javascript angularjs web-services rest

我有一种情况需要使用 GET 方法在AngularJS中使用restful Web服务,允许它在uri参数中接受斜杠“/”字符。 通常“/”斜杠,创建一个不同的端点,服务不提供所需的响应,我需要使用RESTful Web服务,其中参数应作为字符串传递。

需要考虑的情景:

示例网址 http://hostname/servicename/ {参数} 其中参数应为字符串,并且对于以下样本输入应该有效

  • 一个
  • 12
  • 12/15
  • 567分之126

我正在使用以下代码

service.js

angular.module('starter.services', [])
.factory('dataService', ['$http', function($http) {

 var obj = {};
     obj.getData = function(url){
      return $http({
    method: 'GET',
                  url: url,
    headers: {'Content-Type': 'application/json;charset=utf-8'},
  }).then(function successCallback(response) {
                    return response.data;
                }, function errorCallback(response) {
                    return "ERROR";
                });
    }
    return obj;
}])

controller.js

var url =   "http://hostname/servicename/" + paramId + "";   

    dataService.getData(url).then(
        function(response) {
           // Response stuff here
        }
    )

注意:我必须管理客户端的所有内容,并且无法访问Web服务的服务器端代码。

2 个答案:

答案 0 :(得分:2)

像这样对参数进行编码。

encodeURIComponent(paramId)

否则用'%2f'替换/

答案 1 :(得分:1)

您是否尝试过params对象而不是直接在url中传递参数?

如果没有..只需传递参数,如下所示。

<强> service.js

angular.module('starter.services', [])
.factory('dataService', ['$http', function($http) {

 var obj = {};
     obj.getData = function(url, paramId){
      return $http({
                  method: 'GET',
                  url: url,
                  params:{
                       "paramId" : paramId
                  },
                  headers: {'Content-Type': 'application/json;charset=utf-8'},
  }).then(function successCallback(response) {
                    return response.data;
                }, function errorCallback(response) {
                    return "ERROR";
                });
    }
    return obj;
}]);

controller.js

    var url =   "http://hostname/servicename";   

            dataService.getData(url, paramId).then(
                function(response) {
                   // Response stuff here
                }
            );

请告诉我这是否有帮助!