Create a gist now

Instantly share code, notes, and snippets.

Intercept XHR/Ajax requests with AngularJS http interceptors. This allows you to globally intercept and modify requests and responses. You don't need to declare all of the methods, just the ones you need. Some example uses would be logging errors, adding extra headers, or triggering 'loading' screens. This intercepts ALL requests/responses, so y…
// Intercepting HTTP calls with AngularJS.
angular.module('MyApp', [])
.config(function ($provide, $httpProvider) {
// Intercept http calls.
$provide.factory('MyHttpInterceptor', function ($q) {
return {
// On request success
request: function (config) {
// console.log(config); // Contains the data about the request before it is sent.
// Return the config or wrap it in a promise if blank.
return config || $q.when(config);
},
// On request failure
requestError: function (rejection) {
// console.log(rejection); // Contains the data about the error on the request.
// Return the promise rejection.
return $q.reject(rejection);
},
// On response success
response: function (response) {
// console.log(response); // Contains the data from the response.
// Return the response or promise.
return response || $q.when(response);
},
// On response failture
responseError: function (rejection) {
// console.log(rejection); // Contains the data about the error.
// Return the promise rejection.
return $q.reject(rejection);
}
};
});
// Add the interceptor to the $httpProvider.
$httpProvider.interceptors.push('LoggingHttpInterceptor');
});
@facultymatt

Worth noting this only works for Angular 1.1.4 and above. :)

@kylebuch8

Did you mean to push MyHttpInterceptor to the interceptors array instead?

@malikov
malikov commented Nov 14, 2013

@kylebuch8 was thinking the same thing :) MyHttpInterceptor instead of LoggingHttpInterceptor or perhaps changing the name in $provide.factory

@zeroows
zeroows commented Dec 31, 2013

The last line should be

// Add the interceptor to the $httpProvider.
$httpProvider.interceptors.push('MyHttpInterceptor');

@emonidi
emonidi commented Feb 26, 2014

I was not aware that http interceptors exist and you can do that. This is exactly the kind of solution I've been looking for for the project I am currently working on. Thank you so much.

@michaelwills

Nice thing about this is you can modify requests for UI router partial loading.

@biapar
biapar commented Jun 30, 2014

With token?

@meffect
meffect commented Jun 2, 2015

doesnt work , using angular 1.4

@shali3
shali3 commented Jun 17, 2015

In line 29 why do we need the $q.when(response) if it's empty?

@perpantha

Can confirm this doesn't seem to work in Angular 1.4.8. Which is a shame.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment