2014-12-03 9 views
10

Tworzę wywołanie ajax używając $ http w kątowym js. Wprowadziłem w nim limit czasu. Ale chcę pokazać użytkownikowi komunikat o błędzie, jeśli upłynął limit czasu połączenia. Poniżej znajduje się kod.

$http({ 
      method: 'POST', 
      url: 'Link to be called', 
      data: $.param({ 
        key:Apikey, 
        id:cpnId 
       }), 
      timeout : 5000, 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
      }).success(function(result){ 
       alert(result); 
      }).error(function(data){ 
       alert(data); 
      }); 

Czy istnieje sposób, aby wyświetlić użytkownika, jeśli połączenie zostało przekroczone. Czy jest jakiś sposób, aby można go było skonfigurować w jednym miejscu?

Odpowiedz

19

A jeśli chcesz zrobić cos kiedy Przekroczono limit czasu połączenia dla każde żądanie, możesz użyć przechwytywaczy (globalny parametr timeout nie działa):

// loading for each http request 
app.config(function ($httpProvider) { 
    $httpProvider.interceptors.push(function ($rootScope, $q) { 
     return { 
      request: function (config) { 
       config.timeout = 1000; 
       return config; 
      }, 
      responseError: function (rejection) { 
       switch (rejection.status){ 
        case 408 : 
         console.log('connection timed out'); 
         break; 
       } 
       return $q.reject(rejection); 
      } 
     } 
    }) 
}) 
+0

Witam, dostałem odrzucenie.status == 0 gdy upłynął limit czasu żądania, a drugi status błędu sieciowego również 0 – Raniys

+2

przy użyciu kątowego 1.5.11 Otrzymuję kod statusu -1, Jakiś pomysł, gdzie mogę znaleźć oficjalną dokumentację na temat tej wartości? – Rachmaninoff

1

Spróbuj na tej stronie bloga: http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS Ma kompletny przykład działający pod kątem, który rozwiązuje Twoje pytanie.

+5

że lepiej dać trochę wyjaśnień i dostarczyć odnośnik aby uzyskać więcej informacji. W ten sposób będzie pomocna w przypadku, gdy link nie działa. –

+1

To nie jest dobry przykład, ponieważ ustawia timedOut w kodzie wywołującym, nadal nie wie, jak wykryć, kiedy wystąpił prawdziwy czas http. – user3285954

+1

To jest dobra odpowiedź. Limit czasu, którego szuka, zawsze odnosi się do kodu wywołującego, więc nie wiem, o czym mówi @ user3285954. Ten przykład demonstruje użycie obietnicy jako wartości limitu czasu, w której można wstawić dodatkowe dane, aby śledzić, który timeout się potknął. Miły. – JoshuaDavid

-2

Trzeba tylko sprawdzić stan reakcji i to wszystko:

}).error(function(data, status, header, config) { 
     if (status === 408) { 
      console.log("Error - " + status + ", Response Timeout."); 
     } 

}); 

dla globalnego limitu czasu HTTP, przyjrzeć się tej answer

+1

To nie jest dobra odpowiedź. Skąd czerpiesz 408? Nie można założyć, że przekroczenie limitu czasu spowoduje dostarczenie statusu, tzn. Stan może wynosić 0. – JoshuaDavid

+1

To jest niepoprawna odpowiedź. Kod statusu NIE będzie równy 408. –

1

Możesz użyć kątowego przechwytywacza, aby to osiągnąć.

$httpProvider.responseInterceptors 
.push(['$q', '$injector','$rootScope', function ($q, $injector,$rootScope) { 
return function (promise) { 
    return promise.then(function (response) { 
     return response; 
    }, function (response) { 
     console.log(response); // response status 
     return $q.reject(response); 
    }); 
    }; 
}]); 
}]); 

More info see this link

Powiązane problemy