2014-04-11 9 views
8

Ich habe Java-App mit API für REST. Und ich mache Front-End dafür. Jetzt arbeite ich mit Genehmigung.Wie bekomme ich Antwort nach POST in AngularJS?

Wenn ich machen POST-Anfrage App gibt mir JSON Nachricht wie folgt aus: Wenn die Anmeldung und Pass rechts ist

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

Und wenn sie nicht richtig:

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

ich die Antwort sehen im Browser, kann aber nicht in JavaScript-Code verwendet werden.

Und wie kann ich es bekommen und für die nächsten Aktionen überprüfen.

Mein 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); 
      }) 

    } 
]); 

Mein Test HTML ist jetzt einfach.

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

</div> 

Antwort

7

$ http (documentation) gibt ein Versprechen mit zwei als auch zusätzlichen Methoden. success die Sie richtig handhaben und error die Sie nicht definiert haben, aber Sie können leicht nach Ihrer success Funktion ketten.

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

Wenn Ihre Web-Antwort immer noch den Status 200 für Erfolg oder Misserfolg der Rückkehr dann können Sie es auf diese Weise in Ihrem Erfolg Handler behandeln:

$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*/ 
    }); 

auf Kommentare Basierend, Sie müssen auch ändern dies:

data: '?login=test&password=passwo3rd 

zu:

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

Dies liegt daran, dass es sich nicht um eine Abfragezeichenfolge, sondern um einen Teil des Anforderungshauptteils im JSON-Format handelt.

+0

Ich bekomme immer Status 200 unabhängig von Login/Pass. Wenn ich REST-Konsole verwende und eine POST-Anfrage sende, habe ich eine echte Antwort erhalten. – elpofigisto

+0

Wenn dies der Fall ist, sehen Sie sich den zweiten Codeblock an, den Sie basierend auf Ihrem zurückgegebenen Datenmodell basierend auf dem von Ihnen eingeschlossenen JSON basierend darauf, ob das Feld "result" oder "error" enthält, bestimmen können über – Brocco

+0

Ich aktualisiere meinen Code mit .error() – elpofigisto

2

Es könnte für Sie hilfreich sein.

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


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