Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
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');
});

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

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

malikov commented Nov 14, 2013

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

zeroows commented Dec 31, 2013

The last line should be

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

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.

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

biapar commented Jun 30, 2014

With token?

meffect commented Jun 2, 2015

doesnt work , using angular 1.4

shali3 commented Jun 17, 2015

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

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