0

Ich habe geplant, eine benutzerdefinierte Warnmeldung entsprechend den Fehlercodes zu erstellen. Also muss ich die Fehlercodes erhalten, während ich die Anfrage an den Server sende und eine Antwort vom Server bekomme.

500 - Irgendwas ist schiefgelaufen. 403- technischer Fehler aufgetreten; 401 - Datei nicht gefunden. 400- unbefugter Zugriff:

In der Anwendung kann ich den Fehlercode in httpinterceptor Antwort erfassen, aber ich bin nicht in der Lage den Fehlercode in den latenten Versprechen zu erfassen.

var app = angular.module('myApp', []); 

app.run(); 

Controller:

var app = angular.module('myApp', []); 

app.run(); 

app.controller('myController', ['$scope', 'myService', function ($scope, myService) { 
    var myCtrl = this; 
    myCtrl.EmployeeList = []; 
    myService.getData().then(function (data,status) { 
     myCtrl.EmployeeList = data; 
     console.log(status); 
    }), (function (data, status) { 
     if (status === 500) { 
      toastr.warn("technical error occurred"); 
     } 
     else if (status === 400) { 

      toastr.warn("something went wrong"); 
     } 
    }); 
}]); 

var app = angular.module('myApp'); 

app.factory('myService', ['$http', '$q', function ($http, $q) { 
    var fact = {}; 
fact.getData = function() { 
    var deferred = $q.defer(); 
    //$http.get('/Test/getData', 


    $http.get('http://simpleApiEarl.azurewebsites.net/api/envelopes', 
     { 
      cache: true 
     }) 
     .then(function (response) { 
      if (typeof response.data === 'object') 
      { 
       deferred.resolve(response.data); 
      } 
      else 
      { 
       debugger; 
       deferred.reject(response.data); 

       console.log("Error:" +response.status); 
      } 
     }, function (response, status) { 

      console.log(response.status); 
      deferred.reject(response.data,status); 
     }); 
    return deferred.promise; 
} 

return fact; 
}]); 

Arbeiten im interceptor:

var interceptor = function ($q, $rootScope) { 

     return { 
      request: function (config) { 
       console.log(config); 
       return config; 
      }, 

      response: function (response) { 
       var deferred = $q.defer(); 

       return response || $q.when(response); 
      }, 
      responseError: function (rejection) { 
       if (rejection.status == 500) 
       { 

        alert('Bad Request Processed'); 

        return $q.reject(rejection); 


       } 


if(rejection.status == 403) 

{ 
    alert('some thing went wrong'); 
} 
      } 
     } 
    }; 

$httpProvider.interceptors.push(interceptor); 

Problem: Warum bin ich nicht in der Lage den Fehlercode der latenten Versprechen erfassen die ablehnen Antwort ?

Screenshot:

Vor Service-Aufruf zu senden:

enter image description here

Nach Ablehnung Status als 0 enter image description here

In Konsole zu bekommen. enter image description here

Antwort

0

Bevor Sie deferred.reject(response.data, status), versuchen zu console.log(response). Schauen Sie in Ihrem Code nach und Sie sollten Ihren Fehlercode finden.

Wenn Sie können, können Sie ein Bild Ihres Konsolenprotokolls posten.

Von dem, was ich in Ihrem Code zu sehen, Ihre Bedingungen durch diese ersetzen:

if(data.status == 500) toastr.warn("technical error occurred"); 
else if(data.status == 400) toastr.warn("something went wrong"); 

Und in Ihrem Dienst, stoppen zurück response.data Senden:

deferred.reject(response,status); 
+0

Ich erhalte einen Fehlercode in httpinterceptors, aber ich bekomme keine $ q Ablehnung Fehler Antwort. habe den Screenshot aktualisiert. –

+0

Ok, ich sehe es, jetzt öffne jedes Objekt in 'response', wie' config', 'headers' ... Und du hast einen CORS-Fehler, was bedeutet, dass du deine' Access-Control-Allow-Origin 'nicht gesetzt hast 'Header in Ihrem Backend. Kennst du diesen Fehler oder nicht? – trichetriche

+0

Ich kenne den Fehler, ich stelle diese URL für Anzeige Fehlercode .Meine Frage ist nicht in der Lage, den Fehlercode in $ q Ablehnung zu erfassen, zeigt seinen Status als 0, und für 403. Dieser Fehlercode ist in der Lage, in httpinterceptor zu erfassen , warum ich nicht in der Lage bin, dort festzuhalten. –

Verwandte Themen