2012-07-22 23 views
28

Czy ktoś wie, w jaki sposób można sprawdzić, czy nie udało się pobrać zasobu w AngularJS?Źródło niepowodzenia AngularJS GET

Na przykład:

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

Jakieś pomysły?

Odpowiedz

48

Dodatkowa funkcja oddzwaniania po pierwszej funkcji zwrotnej powinna zostać uruchomiona, gdy wystąpi błąd. Zrobione z grupy docs i post:

$scope.word = Word.get({ id : $routeParams.id }, function() { 
    //good code 
}, function(response) { 
    //404 or bad 
    if(response.status === 404) { 
    } 
}); 
  • HTTP GET "klasa" działania: Resource.action ([parametry], [sukces], [Błąd])
  • non-GET „klasa "Actions: Resource.action ([parametry], postData, [sukces], [błąd])
  • Akcje innych niż GET: instancja. $ akcja ([parametry], [sukces], [błąd])
+0

Idealny. Dokładnie tego potrzebuję. Dziękuję :) – matsko

+1

Problem dotyczy instrukcji if. Czy muszę pisać, jeśli (reponse.status == 404), if (reponse.status == 500), if (reponse.status == 501), if .. if .. if? Czy to nie jest powielanie kodu? – Adelin

+1

@Adio Możesz użyć instrukcji switch. –

5

Po prostu odpowiedzieć również na pytanie Adada.

Drugie wywołanie zwrotne zostanie wywołane, gdy dowolny kod odpowiedzi http zostanie uznany za błąd przez AngularJS (tylko kody odpowiedzi w [200, 300] są uważane za kody sukcesu). Więc możesz mieć ogólną funkcję obsługi błędów i nie przejmuj się konkretnym błędem. Instrukcja if może być używana do wykonywania różnych akcji w zależności od kodu błędu, ale nie jest to obowiązkowe.

0

To tylko po to, aby poinformować.

Od wartości kątowej 1.6.x sukces i niepowodzenie są przestarzałe. Więc teraz postępuj zgodnie z tym i złap w imieniu sukcesu i porażki.

więc powyższy kod wygląda w kątowym 1.6.x jest jak poniżej:

$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

To prawda, ale zauważ, że "przestarzałe" dla zespołu Angular oznacza "całkowicie usunięte".Zauważ również, że $ resource bez funkcji obsługi niepowodzeń spowoduje wywołanie catch (przyczyny) bez użytecznych informacji w "reason" (pusty łańcuch, puste dane, żadne inne pola). Najlepszą/jedyną opcją jest użycie get(). $ promise.then (success(), fail()) i upewnij się, że radzisz sobie z funkcją fail. I powodzenia. (v1.6.2) – tekHedd

Powiązane problemy