Angular.js: $http 服务未在 400 上调用错误回调

创建于 2013-05-08  ·  26评论  ·  资料来源: angular/angular.js

版本:1.1.4

createNewWall: function(wall, successCallback, errorCallback) {
    return $http.post($rootScope.baseAppsAPI + '/walls', null, {
       params: wall
    }).success(function(data, status) {
       return successCallback.call(this, data);
    }).error(function(data) {
       return errorCallback.call(this, data);
    });
}

我验证了 angular isSuccess 函数工作正常。 我通过将它添加到 window 对象并验证下面的代码(放置在我的成功回调中)导致错误回调被调用来做到这一点。

if (window.isSuccess(status)) {
   return successCallback.call(this, data);
} else {
  return errorCallback.call(this, data);
}

关于导致问题的原因有什么想法吗? $http 承诺没有被正确拒绝/解决有什么问题吗?

最有用的评论

对我来说@lsiv568的 anwser 做到了。 一开始有点奇怪,但是当您构建错误拦截器( source )时,您必须手动返回一个被拒绝的承诺。

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

所有26条评论

我面临同样的问题。 您关闭问题的方式可能意味着我可能做错了什么等。您能分享您的解决方案吗? 在任何地方都找不到这个。

罗伯特.,

我关闭了这个问题,因为问题在我之后(奇迹般地)消失了
对我的服务做了一些修改。 然而,它似乎回来了
断断续续地。 所以,我不再知道这是我的问题还是我的问题
角度的真正问题。 如果你愿意,我可以重新打开这个问题,你可以
添加您的问题吗? 那对你有用吗?

2013 年 5 月 13 日星期一上午 9:13,Robert [email protected]写道:

我面临同样的问题。 你关闭问题的方式可能意味着我
可能做错了什么等。你能分享你的解决方案吗? 不能
在任何地方找到这个。


直接回复本邮件或在Gi tHub上查看
.

尊敬,

路易斯·W·西维洛

如上所述,我重新打开这个问题,因为它间歇性地发生。 rtpm,请包括您的用例/任何可能有助于确定问题的其他信息

罗伯特,
感谢您发送此内容。

我有一个 http 拦截器,它是我为基本身份验证编写的,它没有拒绝响应错误的承诺。

谢谢你们的机器人。 我有同样的问题。

当服务器返回 401 时 +1 发生在我身上

+1
服务器返回 401 状态代码时,回调函数不起作用。

这方面有什么进展吗? 400 也面临同样的问题。

对我来说@lsiv568的 anwser 做到了。 一开始有点奇怪,但是当您构建错误拦截器( source )时,您必须手动返回一个被拒绝的承诺。

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

用 400 遇到同样的问题..
但是为什么这个问题关闭了,这个问题有没有具体的解决方案?

我也遇到了错误 400 的问题。这个问题解决了吗? 如果是,在哪个版本?

我遇到了所有 >299 错误的相同问题。 我正在将 Restangular 与自定义响应拦截器一起使用,但是我在开箱即用的 $http 服务中遇到错误,CSRF 令牌标头除外。 (无论如何,我尝试从 Restangular 中手动拒绝延迟对象,但正如预期的那样,这并没有改变任何东西。)

我也遇到了这个问题,可以重新打开吗?

原始问题中报告的问题是由于自定义拦截器未正确处理错误条件(未拒绝承诺)。 如果有人仍然遇到问题,这很可能是相同的情况 - 请确认您没有有问题的自定义拦截器。 如果您仍然认为 AngularJS 方面不太正确,请提供一个 _minimal、live_ 重现场景(最好使用 http://plnkr.co/,但任何其他类似的工具都可以)。

@pkozlowski-opensource 谢谢,我确实可以确认这是我的问题(d'oh)。

Angular 文档中应该有关于此的注释 - 我不知道我完全覆盖了实现拦截器的 $http promise 行为。

我也遇到了这个问题,并有一个拦截器,我一次又一次地查看它,因为它确实有正确的返回。 我终于找到了罪魁祸首。 如果您使用多次成功/错误调用,或者您实际上必须确保它们也返回正确的东西:) 成功回调应该返回修改后的响应,而错误回调应该像拦截器一样返回拒绝 $q.reject 。

+1 谢谢各位。 我在 $http.interceptor 的全局自定义中遇到了同样的问题

+1 @chmanie的回答。 非常感谢! 解决了我们的问题。

+1 谢谢@chmanie! 也解决了我的问题

+1 谢谢,拒绝为我修复了它!

+1 .thanks 解决了我的问题。

+1 谢谢,拒绝为我修复了它!

@chmanie的解决方案对我

@chmanie解决方案解决了这个问题。 Angularjs 文档中应该有关于此的说明。

@chmanie 谢谢啦~

此页面是否有帮助?
0 / 5 - 0 等级