【发布时间】:2014-06-30 23:43:54
【问题描述】:
我在与我的 grunt 服务器不同的服务器上提供了一项服务,该服务器为我的 angularjs 应用程序提供服务。
外部服务器是 Apache 服务器,使用 PHP 提供 JSON 数据。
我想拦截任何可能的服务器错误(从“服务器停机”到“404”...)。
我尝试过这样使用拦截器:
app.factory('myFactory', function($resource) {
return $resource('http://www.remote.server.com/api/WRONGPATH',
});
app.config(function ($routeProvider, $httpProvider) {
...
$httpProvider.responseInterceptors.push(function($q) {
return function(promise) {
return promise.then(function(successResponse) {
if (successResponse.config.method.toUpperCase() !== 'GET') {
console.info('success');
}
return successResponse;
}, function(errorResponse) {
switch (errorResponse.status) {
case 401:
console.info('wrong usename or password');
break;
case 403:
console.info('no rights to do this');
break;
case 500:
console.info('server internal error: ' + errorResponse.data);
break;
default:
console.info('error ' + errorResponse.status + ': ' + errorResponse.data);
}
return $q.reject(errorResponse);
});
};
});
});
没有成功:我总是陷入“默认”开关情况,errorResponse.status == 0。
我想这是因为浏览器在拦截 CORS 错误时停止...
如果我用本地网址更改远程网址,一切都会正常...
是否有可能处理 angular.js $resource(或 $http)远程请求错误?
我也会接受设计转变建议,比如以类似 grunt 的方式重新实现我的 PHP 服务......(我的 PHP 服务 - 实际上 - 只是从服务器文件夹打印图像名称的 JSON 列表...... .).
【问题讨论】:
标签: javascript angularjs cors