【问题标题】:AngularJS $http service never calls the error handlerAngularJS $http 服务从不调用错误处理程序
【发布时间】:2014-03-24 22:00:54
【问题描述】:

我有这个代码:

$http
.post('/api/login', $scope.user)
.success(function (data, status, headers, config) {
  // code
})
.error(function (data, status, headers, config) {
  // code
});

它可以工作,但即使服务器返回异常(状态 500)或错误请求 (400) 或未经授权的请求 (401),它仍会调用成功处理程序。

这是来自服务器的示例响应(我的服务器是 ASP.NET Web API 2):

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcRG9jdW1lbnRzXFRpbWVUYWJsZVxqYW4tMjAxNFwxMVxUaW1lVGFibGVcVGltZVRhYmxlXGFwaVxsb2dpbg==?=
X-Powered-By: ASP.NET
Date: Sun, 23 Feb 2014 10:56:09 GMT
Content-Length: 0

【问题讨论】:

  • 这可能是一个愚蠢的答案,但是...尝试只将data 留在.success 中。
  • 看起来很奇怪,我看你的代码没什么问题,它几乎是复制'n'paste fra docs.angularjs.org/api/ng/service/$http。您是否尝试过使用其他网址?
  • 这是他们网站的复制/粘贴。我不知道怎么了,我的应用程序中的每个 url 行为都一样。有人说它与 content-length 0 有关,这是真的吗? @RickiRunge
  • 我不希望 content-lengh 为 0 - 如果确实如此,那么这将是 Angular 中的错误。如果你创建一个总是返回 400 和一些内容的 URL,你可以排除这种情况。
  • 我会询问你的拦截器然后不返回拒绝承诺$q.reject(reason)

标签: javascript jquery ajax angularjs angularjs-service


【解决方案1】:

您需要确保在拦截器中为“responseError”属性返回一个被拒绝的承诺。如果您只是返回响应或未实现“responseError”,那么无论状态码如何,成功函数都将始终运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多