2017-07-21 2 views
0

In meiner derzeitigen Situation benutze ich einen $ http Interceptor, um Antwortfehler aufzufangen und eine einfache Nachricht anzuzeigen, um dem Benutzer mitzuteilen, dass etwas schief gelaufen ist. Aber jetzt möchte ich unterscheiden zwischen Fehlern, die von Anfragen, die während des Ladens einer Seite gesendet werden, oder Anfragen, die aufgrund einer Aktion des Benutzers selbst gesendet werden (z. B. einen Knopf drücken, ein Feld eingeben ...) .Wie man weiß, wann eine Seite vollständig geladen ist (einschließlich ihrer AJAX-Anfragen)

Beispiel für die $ httpInterceptor ich haben will:

return { 
    responseError: function (response) { 
     // IF THE REQUEST IS FROM A PAGE LOAD 
     // DO SOMETHING 
     // IF THE REQUEST IS NOT FROM A PAGE LOAD 
     // DO SOMETHING ELSE 
     return $q.reject(response); 
    } 
}; 

es ein wenig klarer zu machen: 1

CASE: Ein Benutzer für eine Seite zu laden wartet:

  • REQ 1
  • REQ 2 gesendet wird
  • REQ 3gesandt
    • REQ 4 wird nach dem Ansprechen des REQ 3
      • REQ 5 gesendet wird nach dem Ansprechen des REQ 4
  • REQ 6
    • REQ 7 gesendet wird gesendet nach Antwort von REQ 6

Alle oben genannten Anforderungen sind Teil der Seitenladung und wenn einer von ihnen einen Fehler zurückgibt, sollte es ein bestimmtes Verhalten haben.

fordert, dass nicht wegen einer Seite zu laden ausgelöst:

CASE 2: Benutzer drückt einen Knopf:

  • REQ1
    • REQ 2 gesendet wird, wird nach der Reaktion von REQ gesendet 1

Diese Anfragen ar Sie sind nicht Teil der Seitenladung und sollten sich im Fehlerfall anders verhalten.

Gibt es eine Möglichkeit, dass ich irgendwie zwischen diesen beiden Fällen unterscheiden kann? Da mein Projekt ziemlich groß ist, möchte ich nicht den Code jeder $ http-Anfrage ändern, um festzustellen, ob es sich um eine Seitenladung handelt oder nicht, also ist das für mich keine Lösung.

+0

Schauen Sie sich diesen Link https://stackoverflow.com/questions/4231580/get-if-browser-is-busy – Nicolas

+0

definieren, was Sie mit Seite loada bedeuten kann, (partials html und andere Vermögenswerte?) . Wenn Sie verstehen, dass Sie Ausnahmen mit etwas verzieren Nachricht fangen, wenn Vorlagen laden und fehlschlägt, und andere, wenn von einer Art von api i kommt, richtig? –

Antwort

0

Sie können eine Art oder einen regulären Ausdruck erstellen und testen, wenn sie aus der Wunsch-URL kommen und eine Auswahl treffen.

.service('RequestsInterceptor', [ 
'$q', 
function(
    $q, 
) { 
    var UNAUTHORIZED_CODE = 401; 
    var FORBIDDEN_CODE = 403; 
    var NOTFOUND_CODE = 404; 
    var INTERNAL_ERROR = 500; 

     this.request = function(config) { 
      //logic to send 
      return config || $q.when(config); 
     }; 
     this.responseError = function(rejection) { 

      console.log(rejection.config.url) 

      var apiPattern = /\/api\//; 

      if(apiPattern.test(rejection.config.url)) { 
       //do your logic when url are api 
      }else{ 
       //do your logic when url are templates 
      } 
      return $q.reject(rejection); 
     }; 
    } 
]); 
Verwandte Themen