Javascript $http错误回调响应始终未定义
我在尝试优雅地处理$http错误时遇到问题。我在一个服务器列表上循环,以便对状态进行API调用。为完美完成的调用。那些失败的没有给我访问错误信息的权限。它总是未定义的。以下是代码片段: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/
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,并且必须响应您的域被授权发出请求。如果您控制远程服务器,这不是问题。如果不是,它可能工作,也可能不工作,这取决于服务器配置。如果不起作用,您可能必须通过为您的应用提供服务的服务器代理请求。如何通过服务器代理请求?你能解释一下吗?因为我没有成功地让它工作。谢谢