2016-03-16 239 views
1

我有以下簡單的代碼:

$http(request) 
    .success(function(data){            
       ... 
      }) 
    .error(function(data){ 
       ... 
      }); 

一個問題我得到的是當響應導致了錯誤,我回來的JSON響應,我可以看到一個錯誤通過data.error,但是我現在的工作方式data.error實際上是成功的,而不是一個錯誤。

什麼是最好的處理方法?將它簡單爲:

if (data.error){ .... 
+0

我不明白你的意圖。你是否想要觸發錯誤,但觸發成功? –

+0

您可能可以測試響應中的特定字符串或子字符串,以進一步確定它是否爲錯誤。 –

+0

是的錯誤只觸發例如,如果數據不回來(這是正確的),但對某些請求導致錯誤,它可以通過data.error識別,但不知道什麼是最好的方式來控制在響應內。 – Poiro

回答

1

首先在所有你不應該使用.success和.error(見https://docs.angularjs.org/api/ng/service/ $ HTTP#棄用通知書)

所以你應該以下列方式使用:

$http({ 
    method: 'GET', 
    url: '/someUrl' 
}).then(function successCallback(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
    }, function errorCallback(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 

希望這能幫到你!

+0

儘管如此,他仍然沒有回答他的問題。 –

2

按照Angular docs

被認爲是成功的 狀態,並且將導致在成功回調被稱爲200和299之間的響應狀態代碼。請注意, 如果響應是重定向,則XMLHttpRequest將會透明地 跟隨它,這意味着將不會針對此類 響應調用錯誤回調。

所以,如果你在你的JSON返回data.error,但響應正在爲200的HTTP狀態代碼返回,你.error處理程序將不會被調用。

要回答你的問題,那麼,是的 - 做一些像if (data.error) {... }應該做的伎倆。

+0

- 我實際上得到200回,因爲迴應確實回來了,根本不是正確的格式,因爲迴應中的附加錯誤。 – Poiro

+0

請注意@Sebastian Pederiva的回答:.success和.error自從Angular 1.4.4開始支持使用.then –