Angular $ http错误回调响应始终未定义

时间:2013-08-08 16:09:02

标签: javascript angularjs

我在尝试优雅地处理$ http错误时遇到问题。我循环遍历服务器列表以进行状态的API调用。成功完成的电话完美无缺。失败的那些不会让我访问错误信息。它总是未定义的。以下是代码段:

angular.forEach($scope.servers, function (server) {
    // blank out results first
    server.statusResults = {};

    $http.jsonp(server.url + '/api/system/status?callback=JSON_CALLBACK', {headers: { 'APP-API-Key': server.apiKey }}).
        success(function (data, status, headers, config) {
            server.statusResults = data;
        }).
        error(function (data, status, headers, config) {
            // data is always undefined here when there is an error
            console.error('Error fetching feed:', data);
        });
    }
);

控制台输出显示正确的401错误(我没有输出)和我的控制台错误消息(我输出的)带有未定义的数据对象。

GET https://server_address/api/system/status?callback=angular.callbacks._1 401 (Unauthorized) angular.min.js:104
Error fetching feed: undefined 

我想要做的是没有Angular在日志中显示401,而是以优雅的方式显示它。但是由于数据未定义,我无法访问信息。

我是AngularJS的新手,但我的例子与我在文档中找到的其他示例非常匹配。

我也尝试使用$ resource而不是$ http,并且遇到了完全相同的问题。

var statusResource = $resource(server.url + '/api/system/status', {alt: 'json', callback: 'JSON_CALLBACK'},
                { status: {method: 'JSONP'}, isArray: false, headers: { 'APP-API-Key': server.apiKey } });

// make status API call
statusResource.status({}, function (data) {
    server.statusResults = data;
}, function (err) {
    // data is always undefined here when there is an error
    console.log(err);
});

我可能做了一些明显错误的事情,但我不确定还有什么可以尝试的。

1 个答案:

答案 0 :(得分:0)

根据$http docsbody

  

使用变换函数转换响应体。

有了401(Unauthorized)错误,你回来了,很可能没有返回正文,因此它未定义。

如果要记录错误代码,请记录status参数。它包含HTTP状态代码,与响应主体不同,它应该是统一的。