处理AngularJS中的HTTP 500内部服务器错误

时间:2016-09-29 10:27:02

标签: angularjs ajax ionic-framework

我正在构建一个带离子的应用程序,我想处理$ 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调用并停止微调器并向用户显示一些弹出窗口“遇到服务器错误”。

2 个答案:

答案 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');
 });