2014-04-11 11 views
8

Ho un'app java con API per REST. E faccio front-end per questo. Ora sto lavorando con l'autorizzazione.Come ottenere la risposta dopo il POST in AngularJS?

quando faccio richiesta POST app mi restituisce il messaggio di JSON come questo: Se il login e pass è giusto

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

E se non hanno ragione:

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

posso vedere la risposta nel browser, ma non può utilizzarlo nel codice JavaScript.

E come posso ottenerlo e controllare le azioni successive.

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

    } 
]); 

La mia prova HTML è facile ora.

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

</div> 

risposta

7

$ http (documentation) restituisce una promessa con due metodi aggiuntivi. success che si sta gestendo correttamente e error che non si è definito, ma è possibile concatenare facilmente dopo la funzione success.

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

Se la vostra risposta web è ancora ritornando uno stato 200 per il successo o il fallimento, allora si può gestire questa convenzione nel vostro gestore di successo:

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

Sulla base dei commenti, lei sarà anche necessario modificare questo:

data: '?login=test&password=passwo3rd 

a:

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

Questo perché non è una stringa di query ma invece parte del corpo della richiesta in formato JSON.

+0

Ricevo sempre lo stato 200 indipendentemente dal login/passaggio. se uso la console REST e invio la richiesta POST, ho una risposta vera. – elpofigisto

+0

In questo caso, guarda il secondo blocco di codice che ho incluso, in base al modello di dati che viene restituito, puoi determinare la logica in base al fatto che il campo sia incluso "risultato" o "errore" in base al JSON che hai incluso sopra – Brocco

+0

aggiorno il mio codice con .error() – elpofigisto

2

Potrebbe essere utile per voi.

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


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