Skip to content

Instantly share code, notes, and snippets.

@gnomeontherun
Last active November 4, 2020 06:46
Show Gist options
  • Save gnomeontherun/5678505 to your computer and use it in GitHub Desktop.
Save gnomeontherun/5678505 to your computer and use it in GitHub Desktop.
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');
});
@kylebuch8
Copy link

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

@malikov
Copy link

malikov commented Nov 14, 2013

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

@zeroows
Copy link

zeroows commented Dec 31, 2013

The last line should be

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

@emonidi
Copy link

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
Copy link

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

@biapar
Copy link

biapar commented Jun 30, 2014

With token?

Copy link

ghost commented Jun 2, 2015

doesnt work , using angular 1.4

@shali3
Copy link

shali3 commented Jun 17, 2015

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

@perpantha
Copy link

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

@vejandla
Copy link

vejandla commented Mar 2, 2018

Does this work with iframe requests?

@eternalsayed
Copy link

@vejandla: Nope. It doesn't.

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