2014-12-03 15 views
10

Sto effettuando una chiamata ajax utilizzando $ http in angular js. Ho implementato il timeout in esso. Ma voglio mostrare all'utente un messaggio di errore se la connessione scade. Quello che segue è il codice ..Come visualizzare l'errore di timeout in js angolari Chiamate http http?

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

Esiste un modo per poter visualizzare l'utente se la connessione è scaduta. Esiste un modo per poterlo configurare in un unico posto?

risposta

19

E se si vuole fare un che di quando la connessione è scaduta per ogni richiesta, è possibile utilizzare gli intercettori (il parametro di timeout globale non funziona):

// 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

Ciao amico, ho ottenuto il rejection.status == 0 quando la richiesta è scaduta, e l'altro stato di errore di rete anche 0 – Raniys

+2

usando angular 1.5.11 Ricevo il codice di stato -1, Qualche idea dove posso trovare documentazione ufficiale su questo valore? – Rachmaninoff

1

Provate su questa pagina di blog: http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS Ha un esempio angolare completo che risolve la vostra domanda.

+5

suo meglio dare qualche spiegazione e fornire link per maggiori informazioni. In questo modo sarà utile nel caso in cui il collegamento non funziona. –

+1

Questo non è un buon esempio perché imposta il timeout nel codice del chiamante, ancora non so come rilevare quando si è verificato un timeout vero e proprio. – user3285954

+1

Questa è una buona risposta. Il timeout angolare sta cercando si riferisce sempre al codice del chiamante comunque, quindi non so cosa stia parlando @ user3285954. Questo esempio dimostra l'utilizzo di una promessa come valore di timeout, in cui è possibile inserire dati aggiuntivi per tenere traccia di quale timeout è stato attivato. Bello. – JoshuaDavid

-2

Hai solo bisogno di verificare lo stato di risposta e il gioco è fatto:

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

}); 

Per timeout HTTP globale, dare un'occhiata a questo answer

+1

Questa non è una buona risposta. Da dove prendi il 408? Non si può presumere che il timeout si tradurrà in uno stato di consegna, ad esempio lo stato potrebbe essere 0. – JoshuaDavid

+1

Questa è una risposta errata. Il codice di stato NON sarà uguale a 408. –

1

Per ottenere ciò è possibile utilizzare l'intercettatore angolare.

$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

Problemi correlati