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

Javascript $http错误回调响应始终未定义,javascript,angularjs,Javascript,Angularjs,我在尝试优雅地处理$http错误时遇到问题。我在一个服务器列表上循环,以便对状态进行API调用。为完美完成的调用。那些失败的没有给我访问错误信息的权限。它总是未定义的。以下是代码片段: angular.forEach($scope.servers, function (server) { // blank out results first server.statusResults = {}; $http.jsonp(server.url + '/api/system/

我在尝试优雅地处理$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 
我想做的不是在日志中显示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);
});

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

根据
$http
正文是

用变换函数变换的响应体

对于返回的401(未经授权)错误,很可能没有返回任何实体,因此它是未定义的


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

服务器的响应到底是什么样子的?还有。谢谢,但这不起作用。错误是401,但状态代码返回0。我没有注意到您正在使用JSONP。您无法用JSONP捕获错误代码。请参阅@Pointy在其评论中给出的链接,特别是在评论中链接的链接。谢谢。来自Pointy的链接对此进行了很好的解释。我将在CORS中仔细观察。我认为这也可以解决这个问题?它可以解决这个问题,但需要注意一些事项——服务器必须设置为处理CORS,并且必须响应您的域被授权发出请求。如果您控制远程服务器,这不是问题。如果不是,它可能工作,也可能不工作,这取决于服务器配置。如果不起作用,您可能必须通过为您的应用提供服务的服务器代理请求。如何通过服务器代理请求?你能解释一下吗?因为我没有成功地让它工作。谢谢