如果状态代码小于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也不起作用,因为在“承诺替换”发生后使用它们。
答案 0 :(得分:1)
来自文档:
200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。任何超出该范围的响应状态代码都被视为错误状态,并将导致调用错误回调。
<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
});