2015-10-26 79 views
1

我在新的角度,如果我的问题是有点低拉特不要生我的气。

我有它返回的sessionId和登录成功消息,如果用户将通过身份验证的Web服务。例如网址是:

http://localhost:8181/login?username=USERNAME&password=12345

,这里是我的回应:

{"sessionId":"0997cec2a8b34c84ba8419ab1204e6aa","loginSucceeded":true} 

这里是我的登录控制器:

app.controller('loginCtrl', function($scope, loginService){ 
    $scope.login=function(user){ 
     loginService.login(user); 
    } 
}); 

,这里是我的服务:

app.factory('loginService', function($http){ 
    return{ 
     login: function(user){ 
      var $promise=$http.post('http://localhost:8181/login?', user); 
      $promise.then(function(msg){ 
       if(msg.loginSucceeded=="true") 
        console.log("opa") 
       else 
        console.log("den"); 
      }); 
     } 
    } 
}); 

和我有user.username和user.pass字在我的范围内(使用文本框)。

如何我通过在URL那些参数,我怎么能解析对此有何反应?

+0

你可以把它们添加到使用字符串连接的URL。 – toskv

+0

@toskv ok了解它。那么解析响应呢? – gsiradze

+0

通常响应具有** **数据与已解析的信息发送的服务器(假设服务器使用JSON或串做出响应)字段。 – toskv

回答

4

在你的代码会在POST请求的URL通过用户名和密码。如果这是你真正想要的(这是更常见的是将它们传递作为POST数据),比你可以使用这样的:如果你想传递的数据作为POST数据

login: function(user){ 
    var url = 'http://localhost:8181/login?username=' + user.name + '&password=' + user.password; 
    $http.post(url).then(function(msg){ 
     if(msg.loginSucceeded==="true"){ 
      console.log("opa") 
     }else{ 
      console.log("den"); 
     } 
    });  
} 

,可以传递作为第二个参数在$http.post()电话:

login: function(user){ 
    var url = 'http://localhost:8181/login'; 
    var data = {username: user.name, password: user.password}; 
    $http.post(url, data).then(function(msg){ 
     if(msg.loginSucceeded==="true"){ 
      console.log("opa") 
     }else{ 
      console.log("den"); 
     } 
    }); 
}; 
+0

感谢REST控制器,但它抛出一个异常“的ReferenceError:$范围没有定义” – gsiradze

+0

对不起,我误解了你的问题。我看到:我的作用域中有user.username和user.password,所以我直接使用了作用域。我没有看到你正在使用服务来打电话。我已经更新了我的答案。 – JasperZelf

1

我从来没有见过任何人通过查询字符串传递登录数据, 如果你是在简单的HTTP协议...你应该考虑使用Basic Access AuthenticationoAuth ...

由WA Ÿ,如果你需要做上述的事情......这可以帮助你!

angular 
 
    .module('test', []) 
 
    .service('LoginService', function($q, $http) { 
 
    var self = this; 
 
    
 
    self.login = function(username, password) { 
 
     var configs = { cache: false }; 
 
     var payload = { 
 
     "username" : username, 
 
     "password" : password 
 
     }; 
 
     
 
     // The Method Post is generally used with a payload, but if you need to pass it as query string... you have to do: 
 
     configs.params = payload; 
 
     return $http 
 
     .post('/api/login', null /* but normally payload */, configs) 
 
     .then(function(result) { 
 
      console.log('LoginService.login:success', result); 
 
      return result.data; 
 
     }) 
 
     .catch(function(error) { 
 
      console.log('LoginService.login:error', error); 
 
      return $q.reject(error); 
 
     }); 
 
     ; 
 
    }; 
 
    }) 
 
    .controller('LoginCtrl', function(LoginService, $scope) { 
 
    var vm = $scope 
 
    vm.username = 'hitmands'; 
 
    vm.password = 'helloWorld'; 
 
    vm.debug = 'CIAO'; 
 
    
 
    vm.onFormSubmit = function(event, form) { 
 
     if(form.$invalid) { 
 
     event.preventDefault(); 
 
     return; 
 
     } 
 
     
 
     vm.debug = null; 
 
     
 
     return LoginService 
 
     .login(vm.username, vm.password) 
 
     .then(function(data) { vm.debug = data; }) 
 
     .catch(function(error) { vm.debug = error; }) 
 
    ; 
 
     
 
    }; 
 
    }) 
 
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<article ng-app="test"> 
 
    <div ng-controller="LoginCtrl"> 
 
    <form ng-submit="onFormSubmit($event, loginForm);" name="loginForm"> 
 
     <input type="text" placeholder="username" ng-model="username"> 
 
     <input type="password" placeholder="Password" ng-model="password"> 
 
     <div> 
 
     <button type="submit">Send Login Data</button> 
 
     </div> 
 
     
 
     <div style="color: blue; padding: 1em .5em;" ng-bind="debug | json"> 
 
     </div> 
 
    </form> 
 
    </div> 
 
</article>