我正在构建一个带离子的应用程序,我想处理$ http()AJAX调用中发生的500内部服务器错误。是否有可能创建任何拦截器来处理它?</ p>
这是我的控制器代码:
.controller('RegistrationController',function($scope,$http){
$scope.doRegistration = function(){
$http({
method : "POST",
url : BASE_URL,
params : {
//sending the parameters as JSON
}
}).then(function successCallback(response){
if(response.status == 200)
//handling the response sent by server
},function errorCallback()});
};
});
如果用户输入了一些无效输入且服务器无法处理,则会引发500内部服务器错误。当进行AJAX调用时,我正在显示一个微调器,当发生一些服务器错误时,我应该停止AJAX调用并停止微调器并向用户显示一些弹出窗口“遇到服务器错误”。
答案 0 :(得分:2)
'use strict';
angular.module('myApp').factory('MyService', function ($http, $q) {
var BASE_URL = 'some.url.com';
function register() {
var defer = $q.defer();
$http({method: "POST", url: BASE_URL, params: {}})
.then(function (response) {
defer.resolve(response.data);
})
.catch(function (reason) {
defer.resolve(reason);
});
return defer.promise;
}
return {
register: register
}
}).controller('MyController', function ($scope, MyService) {
MyService.register().then(function (response) {
// success
}).catch(function (reason) {
// err
if (reason.status === 500) {
// do something
$scope.spinner = false;
console.log('Encountered server error');
}
});
});
答案 1 :(得分:0)
你可以创建拦截器,如下所示 -
app.factory('testResponseInterceptor', function ($q ,$rootScope,$location) {
return {
response: function (response) {
//correct response
return response;
},
responseError: function (response) {
//error in response
}
};
});
并在您的模块中配置它 -
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('testResponseInterceptor');
});