2014-12-03 68 views
10

我正在角js中使用$ http進行ajax調用。我已經實現了超時。但是如果連接超時,我想向用戶顯示錯誤消息。以下是代碼..

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

有沒有什麼辦法讓我可以顯示用戶,如果連接超時。 有什麼辦法可以在一個地方配置它嗎?

回答

19

如果你想做些事情的時候連接超時的每個請求,你可以使用攔截器(全局超時參數不起作用):

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

嗨,我得到了拒絕。狀態== 0當請求超時,並且其他網絡錯誤狀態也是0 – Raniys 2017-05-09 05:51:05

+2

使用角度1.5.11我得到狀態碼-1,任何想法在哪裏可以找到有關此值的官方文檔? – Rachmaninoff 2017-05-10 11:07:12

1

試試這個博客頁面:http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS 它有一個完整的角度運行的例子可以解決你的問題。

+5

其更好地給一些說明和詳細信息,提供鏈接。這樣在鏈接不工作的情況下會有幫助。 – 2014-12-03 14:37:17

+1

這不是一個好例子,因爲在調用者代碼中設置timedOut,但仍不知道如何檢測何時發生真正的http超時。 – user3285954 2015-05-27 15:04:49

+1

這是一個很好的答案。超時角正在尋找始終指的是調用者代碼,所以我不知道@ user3285954在說什麼。此示例演示如何使用promise作爲超時值,您可以在其中插入額外的數據以跟蹤哪個超時被觸發。尼斯。 – JoshuaDavid 2016-03-16 18:10:59

-2

你只需要檢查響應狀態,這就是它:

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

}); 

對於全局HTTP超時,看看這個answer

+1

這不是一個好的答案。你從哪裏得到408?您不能假定超時會導致狀態被傳遞,即狀態可能爲0. – JoshuaDavid 2016-03-16 18:06:59

+1

這是不正確的答案。狀態碼不會等於408. – 2016-03-29 23:20:36

1

你可以使用角攔截器來實現這一點。

$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

相關問題