AngularJS Intercept all $http JSON responses AngularJS Intercept all $http JSON responses angularjs angularjs

AngularJS Intercept all $http JSON responses


You can intercept responses by adding an interceptor to $httpProvider.interceptors with Angular 1.1.4+ (see documentation here search for interceptors).

For a specific content type like json you can potentially reject changes or throw an exception even if the call was a success. You can modify the response.data that will get passed to your controller code as well here:

myModule.factory('myHttpInterceptor', function ($q) {    return {        response: function (response) {            // do something on success            if(response.headers()['content-type'] === "application/json; charset=utf-8"){                // Validate response, if not ok reject                var data = examineJSONResponse(response); // assumes this function is available                if(!data)                    return $q.reject(response);            }            return response;        },        responseError: function (response) {            // do something on error            return $q.reject(response);        }    };});myModule.config(function ($httpProvider) {    $httpProvider.interceptors.push('myHttpInterceptor');});

NOTE: Here is the original answer for versions prior to 1.1.4 (responseInterceptors were deprecated with Angular 1.1.4):

Maybe there's a better way but I think you can do something similar to this post with the http response interceptor (described here) (for a specific content type like json) where you potentially reject changes or throw an exception even though the call was a success. You can modify the response.data that will get passed to your controller code as well here.

myModule.factory('myHttpInterceptor', function ($q) {    return function (promise) {        return promise.then(function (response) {            // do something on success            if(response.headers()['content-type'] === "application/json; charset=utf-8"){                // Validate response if not ok reject                var data = examineJSONResponse(response); // assumes this function is available                if(!data)                    return $q.reject(response);            }            return response;        }, function (response) {            // do something on error            return $q.reject(response);        });    };});myModule.config(function ($httpProvider) {    $httpProvider.responseInterceptors.push('myHttpInterceptor');});


Another solution is to create a service and use that around the $http variable.

angular.module('App', [])  .factory('myHttp',['$http',function($http) {    return function(url, success, failure) {      $http.get(url).success(function(json) {          var data = examineJSONResponse(json);          data && data.success ? success() : failure();        }).error(failure);      );    }}]);

And now this can be called like:

myHttp(url, onSuccess, onFailure);