Angular $http 错误回调响应始终未定义
Posted
技术标签:
【中文标题】Angular $http 错误回调响应始终未定义【英文标题】:Angular $http error callback response is always undefined 【发布时间】:2013-08-10 10:51:26 【问题描述】:我在尝试优雅地处理 $http 错误时遇到问题。我正在遍历服务器列表以对状态进行 API 调用。完美地成功完成的调用。失败的那些没有让我访问错误信息。它总是未定义的。这是代码sn-p:
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);
);
我可能在做一些明显错误的事情,但我不确定还能尝试什么。
【问题讨论】:
服务器的响应究竟是什么样的? 还有see this interesting question and answer。 【参考方案1】:根据$http
docs,body
是
使用变换函数变换的响应体。
由于您返回的 401(未授权)错误,很可能没有返回正文,因此它是未定义的。
如果要记录错误代码,请改为记录status
参数。它包含 HTTP 状态代码,与响应正文不同,它应该是统一的。
【讨论】:
谢谢,但这没有用。错误是 401,但状态码返回 0。 我错过了您使用 JSONP。您无法使用 JSONP 捕获错误代码。请参阅@Pointy 在他的评论中给出的链接,特别是在评论中链接的this answer。 谢谢。 Pointy 的链接很好地解释了这一点。我将在 CORS 中仔细观察。我想这也能解决这个问题? 它可以通过一些警告来解决问题——服务器必须设置为处理 CORS,并且必须响应您的域被授权发出请求。如果您控制远程服务器,那不是问题。如果没有,它可能会也可能不会工作,具体取决于服务器配置。如果它不起作用,您可能必须通过为您的应用提供服务的服务器代理请求。 如何通过服务器代理请求?你能解释一下吗?因为我没有成功让它发挥作用。谢谢以上是关于Angular $http 错误回调响应始终未定义的主要内容,如果未能解决你的问题,请参考以下文章
回调在 Angular2/Firebase 中生成“TypeError:这是未定义的”
Angular 为啥这个 HTTP 请求响应数组的长度未定义?