#angularjs #ajax #ionic-framework
#angularjs #ajax #ionic-framework
Вопрос:
Я создаю приложение с помощью ionic и хочу обработать внутреннюю ошибку сервера 500, которая возникает при вызове AJAX $ http(). Возможно ли создать какие-либо перехватчики для обработки этого?
вот мой код контроллера:
.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 и остановить счетчик и показать пользователю всплывающее окно с сообщением «Обнаружена ошибка сервера».
Ответ №1:
'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');
}
});
});
Ответ №2:
вы можете создать перехватчик, как показано ниже —
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');
});