2012-07-22 17 views
28

Weiß jemand, wie Sie überprüfen können, dass eine Ressource in AngularJS nicht abgerufen werden konnte?AngularJS Failed Resource GET

Zum Beispiel:

//this is valid syntax 
$scope.word = Word.get({ id : $routeParams.id },function() { 
    //this is valid, but won't be fired if the HTTP response is 404 or any other http-error code 
}); 

//this is something along the lines of what I want to have 
//(NOTE THAT THIS IS INVALID AND DOESN'T EXIST) 
$scope.word = Word.get({ id : $routeParams.id },{ 
    success : function() { 
     //good 
    }, 
    failure : function() { 
     //404 or bad 
    } 
}); 

Irgendwelche Ideen?

Antwort

48

Eine zusätzliche Callback-Funktion nach Ihrer ersten Callback-Funktion sollte bei einem Fehler ausgelöst werden. Genommen von der docs und Gruppe post:

$scope.word = Word.get({ id : $routeParams.id }, function() { 
    //good code 
}, function(response) { 
    //404 or bad 
    if(response.status === 404) { 
    } 
}); 
  • HTTP GET "Klasse" Aktionen: Resource.action ([Parameter], [Erfolg], [Fehler])
  • nicht-GET-Klasse“ "Aktionen: Resource.action ([Parameter], PostData, [Erfolg], [Fehler])
  • Nicht-GET-Instanz Aktionen: Instanz. $ Aktion ([Parameter], [Erfolg], [Fehler])
+0

Perfect. Das ist genau das, was ich brauche. Danke :) – matsko

+1

Das Problem ist in der if-Anweisung. Muss ich schreiben if (reponse.status == 404), if (antwort.status == 500), if (antwort.status == 501), if .. if .. if? Ist das nicht eine Code-Duplizierung? – Adelin

+1

@Adio Sie können eine switch-Anweisung verwenden. –

5

Nur um @Adios Frage zu beantworten.

Der zweite Rückruf wird, wenn der Code jeder HTTP-Antwort genannt werden, wird in Betracht gezogen, indem AngularJS ein Fehler sein (nur Antwortcodes in [200, 300] Erfolgscodes angesehen werden). So können Sie eine allgemeine Fehlerbehandlungsfunktion haben und sich nicht um den spezifischen Fehler kümmern. Die if-Anweisung dort kann abhängig vom Fehlercode für verschiedene Aktionen verwendet werden, ist jedoch nicht obligatorisch.

0

Dies ist nur zu informieren.

Ab eckigen 1.6.x ist Erfolg und Misserfolg veraltet. Also bitte folgen Sie dem dann und fangen Sie für Erfolg und Misserfolg ein.

Also, der obige Code aussehen wie in Winkel 1.6.x ist wie folgt:

$scope.word = Word.get({ id : $routeParams.id }).then(=>() { 
    //this is valid, but won't be fired if the HTTP response is 404 or any other http-error code 
}).catch(=>() { 
    // error related code goes here 
}); 
+1

Richtig, aber beachten Sie, dass "veraltet" für das Angular-Team "vollständig entfernt" bedeutet.Beachten Sie auch, dass $ resource ohne einen Fehlerhandler dazu führt, dass catch (reason) ohne nützliche Informationen in "reason" aufgerufen wird (leere Zeichenfolge, Nulldaten, keine anderen Felder). Ihre beste/einzige Option ist get(). $ promise.then (success(), fail()) und vergewissere dich, dass du die fail-Funktion verarbeitest. Und viel Glück. (v1.6.2) – tekHedd

Verwandte Themen