如何从AngularJS $ http请求中获取实际错误?

时间:2014-11-06 23:12:40

标签: javascript angularjs angularjs-http

我是AngularJS的新手。我正在尝试获取有关GET请求期间发生的实际错误的信息。我已经设置了这样的请求:

$http.get(myUrl).then(mySuccessFunction).catch(function(reason) {
    //
});

传递给catch的reason对象有5个属性:

  1. config - 包含有关我发送的请求的信息(URL,方法等)
  2. 标题
  3. 数据 - 无论发生的错误是什么,似乎总是为空
  4. status - 无论发生的错误是什么,似乎始终为0
  5. statusText - 无论发生的错误是什么,似乎总是“”
  6. 我还研究过使用$http.get(url).success().error()技术,但是error()函数通常只以参数形式传递相同(看似无用的)信息,而不是作为单个对象的属性传递。 / p>

    在浏览器控制台中,我可以看到请求正在触发状态500或ERR_CONNECTION_REFUSED等。但是,我没有看到如何从reason对象获取该信息。 ..

    如何获取有关请求期间发生的实际错误的信息?


    更新
    我发现这个问题对我来说实际上是一个CORS问题。请参阅下面的答案。

3 个答案:

答案 0 :(得分:0)

$http.get('/someUrl').success(function(data, status, headers, config) {

}).
error(function(data, status, headers, config) {

});

状态变量应提供错误代码,标题应提供有关请求的更多详细信息

答案 1 :(得分:0)

我发现,在我的情况下,问题是一个CORS问题,它隐藏了真正的问题。

在发布问题之前,我正在测试2个错误案例:

  1. 服务器不可用(ERR_CONNECTION_REFUSED)
  2. 服务器遇到内部错误(状态500)
  3. 两个错误条件都通过角度捕获/错误函数给出了完全相同的“错误”数据(null / 0 /“”表示data / status / statusText)。对于(1)null / 0 /“”是正确的响应。对于(2),当我的开发服务器(故意)触发状态500响应时,它没有正确处理该错误响应的CORS。

    显然,对于CORS问题,null / 0 /“”也是 Angular生成的GET 的正确“错误”数据。

    发布此问题后,我尝试了其他错误条件(404等),并开始将更多有用的数据传递给catch / error函数。

答案 2 :(得分:0)

这里是获取StatusText的工作(正如指出一些移动浏览器从成功的响应中删除DATA:https://stackoverflow.com/a/28470163/1586498

我还发现Angular中$。http的.success和.error没有传递StatusText,你必须使用.then(响应)