3

我对AngularJS相当陌生。我正在尝试获取有关 GET 请求期间发生的实际错误的信息。我的请求设置如下:

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

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

  1. config - 包含有关我发送的请求的信息(URL、方法等)
  2. 标题
  3. data - 无论发生什么错误,似乎总是为空
  4. status - 无论发生什么错误,它似乎总是为 0
  5. statusText - 似乎总是“”,不管发生了什么错误

我也研究过使用该$http.get(url).success().error()技术,但是 error() 函数通常以参数形式传递相同的(看似无用的)信息,而不是作为单个对象的属性。

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

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


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

4

3 回答 3

1

我发现,就我而言,问题是 CORS 问题,它隐藏了真正的问题。

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

  1. 服务器不可用 (ERR_CONNECTION_REFUSED)
  2. 服务器遇到内部错误(状态 500)

两种错误情况都通过角度捕获/错误函数给了我完全相同的“错误”数据(数据/状态/状态文本的 null/0/“”)。对于 (1) null/0/"" 是正确的响应。对于 (2),当我的开发服务器(有意)触发状态 500 响应时,它没有正确处理该错误响应的 CORS。

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

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

于 2014-11-07T00:22:53.303 回答
0
$http.get('/someUrl').success(function(data, status, headers, config) {

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

});

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

于 2014-11-06T23:27:39.853 回答
0

这是获取 StatusText 的解决方法(正如所指出的,一些移动浏览器从成功的响应中删除了 DATA: https ://stackoverflow.com/a/28470163/1586498

我还发现 Angular 中 $http 上的 .success 和 .error 没有通过 StatusText,你必须使用 .then(response)

于 2015-02-12T05:47:53.557 回答