2014-12-03 5 views
10

Ich mache einen Ajax-Aufruf mit $ http in eckigen js. Ich habe Timeout darin implementiert. Aber ich möchte dem Benutzer eine Fehlermeldung anzeigen, wenn die Verbindung abläuft. Das Folgende ist der Code ..

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

Gibt es eine Möglichkeit, so dass ich den Benutzer anzeigen kann, wenn die Verbindung abgelaufen ist. Gibt es eine Möglichkeit, so dass es an einer Stelle konfiguriert werden kann?

Antwort

19

Und wenn Sie some tun wollen, wenn die Verbindung für Zeitüberschreitung jede Anfrage können Sie Abfangjäger verwenden (globale Timeout param funktioniert nicht):

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

Hallo Mann, ich habe die Ablehnungsstatus == 0, wenn die Anfrage abgelaufen ist, und der andere Netzwerkfehler-Status auch 0 – Raniys

+2

mit Winkel 1.5.11 Ich bekomme Statuscode -1, Irgendeine Idee wo finde ich offizielle Dokumentation über diesen Wert? – Rachmaninoff

1

Probieren Sie diese Blog-Seite: http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS Es hat ein komplettes angular laufendes Beispiel, die Ihre Frage lösen.

+5

Es ist besser, eine Erklärung zu geben und für weitere Informationen Link zur Verfügung stellen. Auf diese Weise wird es hilfreich sein, falls der Link nicht funktioniert. –

+1

Dies ist kein gutes Beispiel, weil die Zeitüberschreitung im Caller-Code festgelegt ist und immer noch nicht bekannt ist, wann ein echtes HTTP-Timeout aufgetreten ist. – user3285954

+1

Dies ist eine gute Antwort. Der Timeout-Winkel, nach dem gesucht wird, bezieht sich immer auf den Anrufer-Code, also weiß ich nicht, worüber @ user3285954 spricht. In diesem Beispiel wird die Verwendung eines Versprechens als Zeitüberschreitungswert veranschaulicht, bei dem Sie zusätzliche Daten einfügen können, um zu verfolgen, welches Zeitlimit ausgelöst wurde. Nett. – JoshuaDavid

-2

Sie müssen nur die Antwortstatus zu überprüfen, und das ist es:

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

}); 

Für globale HTTP-Timeout, werfen Sie einen Blick auf diese answer

+1

Dies ist keine gute Antwort. Woher bekommst du den 408? Sie können nicht davon ausgehen, dass die Zeitüberschreitung dazu führt, dass ein Status zugestellt wird, d. H. Der Status könnte 0 sein. – JoshuaDavid

+1

Dies ist eine falsche Antwort. Der Status-Code wird nicht gleich 408. –

1

Sie Winkel Abfangjäger verwenden können, dies zu erreichen.

$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