为什么angularjs丢弃http状态代码< 200&&高于300?

时间:2016-01-06 16:44:40

标签: angularjs angular-promise angularjs-http

如果状态代码小于200且大于300,我一直在追踪我无法使用$ http在angularjs中看到我的webapi响应的原因。

我已经调整了angular.js到我理解发生了什么的程度(基本上它丢弃了包含我关心的数据的承诺,并且如果状态代码不被认为是成功则创建一个没有它的新数据)

- 查看https://github.com/angular/angular.js/blob/master/src/ng/q.js#L270-L280

的代码

这个。由于某种原因,$$ state.value(保持http respone)在此时丢失了。

省略原始值是否有意义?如果我没有对错,我不会在这里提交错误报告。

这背后的原因是我正在处理服务器端的一些信用卡信息。如果处理器说它是一张无效的卡,我认为它不会是200代码,不是吗?看到这个问题的答案.....建议400的业务规则。这仍然在angularjs中失败。

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

此外,仅供参考,httpInterceptors也不起作用,因为在“承诺替换”发生后使用它们。

2 个答案:

答案 0 :(得分:1)

来自文档:

  

200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。任何超出该范围的响应状态代码都被视为错误状态,并将导致调用错误回调。

     

— AngularJS $http Service API Reference - General Usage

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="quantity"> <span class="input-number-decrement" style="margin-right: 15px;"><i class="fa fa-angle-left">-</i></span> <input type="text" step="4" min="" max="" name="" value="0" class="input-number" size="4" /> <span class="input-number-increment" style="margin-left: 10px;"><i class="fa fa-angle-right">+</i></span> </div> <div class="quantity"> <span class="input-number-decrement" style="margin-right: 15px;"><i class="fa fa-angle-left">-</i></span> <input type="text" step="4" min="" max="" name="" value="0" class="input-number" size="4" /> <span class="input-number-increment" style="margin-left: 10px;"><i class="fa fa-angle-right">+</i></span> </div> <div class="quantity"> <span class="input-number-decrement" style="margin-right: 15px;"><i class="fa fa-angle-left">-</i></span> <input type="text" step="4" min="" max="" name="" value="0" class="input-number" size="4" /> <span class="input-number-increment" style="margin-left: 10px;"><i class="fa fa-angle-right">+</i></span> </div>服务拒绝200到299范围之外的响应,但不会“丢弃消息响应”。使用整个响应对象调用$http promise的resolve和reject方法。

这意味着拒绝处理程序中可以使用所有数据。

$http

在上面的示例中,拒绝处理程序记录状态为400且转换消息的响应,以使用默认数据来满足。所有其他状态响应都被链接为拒绝。

不丢弃数据;它是可用的,可以在拒绝处理程序中使用。

有关链接承诺的更多信息,请参阅Angular execution order with $q

答案 1 :(得分:0)

当您使用promise回调时,是否在$资源调用之后捕获并最终编写状态代码。

以下是我要检查的内容:

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