2016-01-06 83 views
1

我一直在追蹤我無法看到我的webapi在angularjs中使用$ http的響應的原因,如果狀態代碼小於200且大於300.爲什麼angularjs丟棄http狀態代碼<200 && > 300的消息響應?

我已經調試過angular.js到點我明白髮生了什麼(基本上它丟棄包含我關心數據的承諾,並沒有創造一個新的,如果狀態碼不被認爲是成功的)

- 見代碼在https://github.com/angular/angular.js/blob/master/src/ng/q.js#L270-L280

這。$$ state.value(持有http響應)由於某種原因在此處丟失。

忽略原始值是否有意義?我不會在沒有詢問我是對還是錯的情況下提交錯誤報告。

所有這一切背後的原因是我正在處理服務器端的一些信用卡信息。如果處理器說它是一張無效卡,我不認爲它會是一個200代碼,對嗎?看到這個問題的答案.....建議400的業務規則。這仍然在angularjs失敗。

What is the appropriate HTTP status code response for a general unsuccessful request (not an error)?

此外,僅供參考,httpInterceptors沒有任何工作,因爲這個「承諾更換」發生後,他們被利用。

+0

我不確定在問題結束時如何重複您的標題使這對堆棧溢出非常好的問題。 – TylerH

+0

這不是唯一的http客戶端:我的Oracle服務總線的http連接器有類似的問題,它丟棄了某些代碼的響應。這是一種優化,他們認爲某些代碼的錯誤消息是不相關的。 – Aaron

+3

您提到的Angular代碼的部分與HTTP狀態代碼完全無關。 – Pointy

回答

0

當您使用承諾回調,然後捕獲並最終在$資源調用之後,您是否編寫狀態碼?

這裏是我會檢查:

MyRestAPI.XXX({resource}, {data}, MyCallbackFunction).$promise.catch(function(response) { 
    //should be called upon error 
    //check response.status for HTTP code. 
}).then(function() { 
    // OK 
}); 
1

從文檔:

200和299之間的響應狀態代碼被認爲是成功的狀態,並會導致成功的回調之中調用。任何超出該範圍的響應狀態代碼都被認爲是錯誤狀態,並會導致調用錯誤回調。

— AngularJS $http Service API Reference - General Usage

$http服務拒絕響應的200到299的範圍之外,但它並不「丟棄該消息響應」。使用整個響應對象調用$http承諾的解決方法和拒絕方法。

這意味着所有的數據都在拒收處理程序中可用。

var dataPromise = $http(configObject) 
    .then (function onFulfilled(response) { 
     //return data for chaining 
     return response.data; 
    }) 
    .catch (function onRejected(response) { 
     if (response.status == 400) { 
      console.log("400 Bad Request"); 
      console.log("REASON:", response.data); 
      //chain with default data 
      return defaultData; 
     } else { 
      //throw to chain rejection 
      throw response; 
     } 
    }); 

在上述例子中,廢品處理程序記錄用於與狀態400和轉換到履行了默認數據的拒絕消息的響應。所有其他狀態響應都被視爲拒絕。

數據不會丟棄;它是可用的並且可以在拒絕處理程序中使用。請參閱Angular execution order with $q

+0

應該接受答案。 – user2954463

相關問題