2014-04-11 14 views
8

Mam aplikację java z interfejsem API dla usługi REST. I robię dla niego frontend. Teraz pracuję z autoryzacją.Jak uzyskać odpowiedź po POST w AngularJS?

Kiedy robię POST żądanie aplikacja zwraca mi komunikat JSON tak: Jeśli login i pass jest prawo

{ 
    "result": { 
     "token": "shgvojhhsifav37o5a3sebc3if" 
    } 
} 

A jeśli nie mają rację:

{ 
    "error": { 
     "code": 10, 
     "message": "Incorrect login or password" 
    } 
} 

widzę odpowiedź w przeglądarce, ale nie może jej użyć w kodzie JavaScript.

Jak mogę to uzyskać i sprawdzić, czy nie ma następnych działań?

My JavaScript:

controllers.controller('userAuthCtrl', ['$scope','$http', 
    function($scope, $http){ 
     $http({ 
      method: 'POST', 
      url: '/rest/api/auth/login', 
      data: '?login=test&password=passwo3rd', 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} 
     }). 
      success(function(data, status, header, config) { 
       console.log(header()); 
       console.log(config); 

       $scope.dataU = data; 
       $scope.statusU = status; 
      }).error(function(data, status, header, config){ 
       console.log(header()); 
       console.log(config); 
      }) 

    } 
]); 

Moje testy HTML jest teraz łatwe.

<div class="testCont" ng-controller="userAuthCtrl"> 

</div> 

Odpowiedz

7

$ http (documentation) zwraca obietnicę z dwoma dodatkowymi metodami, jak również. success, które obsługujesz poprawnie i error, których nie zdefiniowałeś, ale możesz łatwo połączyć za pomocą funkcji success.

$http({[options]}) 
    .success(function(data, status, headers, config){}) 
    .error(function(data, status, headers, config){}); 

Jeśli odpowiedź internetowa jest wciąż wraca do stanu 200 do sukcesu lub niepowodzenia następnie można obsługiwać go thusly w przewodnika sukces:

$http({}) 
    .success(function(data, status, headers, config){ 
     /*called for result & error because 200 status*/ 
     if (data.result){ 
      //handle success here 
     } else if (data.error { 
      //handle error here 
    }) 
    .error(function(data, status, headers, config){ 
     /*handle non 200 statuses*/ 
    }); 

Na podstawie uwag, będzie trzeba także zmienić to:

data: '?login=test&password=passwo3rd 

do:

data: {login: 'test', password: 'passwo3rd'} 

Dzieje się tak dlatego, że nie jest to ciąg zapytania, lecz część treści żądania w formacie JSON.

+0

Zawsze otrzymuję status 200 niezależnie od logowania/podania. jeśli używam REST Console i wysyłam żądanie POST, otrzymałem prawdziwą odpowiedź. – elpofigisto

+0

Jeśli tak jest, spójrz na 2. blok kodu, który zawarłem, w oparciu o Twój model danych, który jest zwracany, możesz określić logikę na podstawie tego, czy pole zawiera "wynik" lub "błąd" w oparciu o JSON, który zawierasz powyżej – Brocco

+0

aktualizuję mój kod z .error() – elpofigisto

2

To może być pomocne dla Ciebie.

$http.post("Your URL").success(function(data) { 
     // success 
     here 


    }).error(function(error) { 
     // error 
     console.log(JSON.stringify("Failed to get t&c: " + error)); 
    });` 
Powiązane problemy