2013-10-18 25 views
0

我在應用程序中添加了一個「加載屏幕」。在這篇文章中發現:'Click'

現在我有問題,所有$ http請求導致「成功」回調。即使當url不存在。

$http.post("this doesnt even exist", { }) 
.success(function (data, status, headers, config) { 
    alert("success"); //this callback is called 
}) 
.error(function (data, status, headers, config) { 
    alert("error"); //never called 
}); 

當我禁用'responseInterceptor'時,一切正常。 (例外,未找到,錯誤參數 - >所有錯誤回調的結果)

我正在使用.NET Webservice從中獲取數據。

在成功回調的參數值

data: '' 
status: 0 
headers: 'function(name) { ... }' 
config: JSON.stringify(config) '{"method":"POST","url":"this doesnt even exist","data":{}}' 
+0

我使用「AngularJS v1.0.8」(最新的穩定版) – Stinus

+1

請提供HttpInterceptor – tschiela

+0

的代碼@tschiela HttpInterceptor的代碼是提供商鏈路的精確副本 – Stinus

回答

3

這是因爲響應攔截您鏈接到「燕子」的錯誤。

在以下代碼:

return promise.then(hide, hide);

第一hide是成功的回調,而第二個是用於錯誤回調。

hide函數本身只在所有情況下以return r;結尾,這意味着它將返回響應。

爲了您$http.post知道有一個錯誤的響應攔截器需要返回的承諾作爲拒絕代替:return $q.reject(reason);

這些方針的東西應該有希望的工作,或至少給予進一步指導(請注意,我一直沒能夠測試吧):

$httpProvider.responseInterceptors.push(function ($q) { 
     return function (promise) { 
      numLoadings++; 
      loadingScreen.show(); 

      var hide = function() { 
       if (!(--numLoadings)) loadingScreen.hide(); 
      }; 

      var success = function (response) { 
       hide(); 
       return response; 
      }; 

      var error = function (reason) { 
       hide(); 
       return $q.reject(reason); 
      }; 

      return promise.then(success, error); 
     }; 
    }); 
相關問題