2015-10-26 76 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>