Skip to content

Instantly share code, notes, and snippets.

@gnomeontherun
Last active November 4, 2020 06:46
Show Gist options
  • Select an option

  • Save gnomeontherun/5678505 to your computer and use it in GitHub Desktop.

Select an option

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');
});
@facultymatt

Copy link
Copy Markdown

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

@kylebuch8

Copy link
Copy Markdown

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

@malikov

malikov commented Nov 14, 2013

Copy link
Copy Markdown

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

@zeroows

zeroows commented Dec 31, 2013

Copy link
Copy Markdown

The last line should be

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

@emonidi

emonidi commented Feb 26, 2014

Copy link
Copy Markdown

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

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

@biapar

biapar commented Jun 30, 2014

Copy link
Copy Markdown

With token?

ghost commented Jun 2, 2015

Copy link
Copy Markdown

doesnt work , using angular 1.4

@shali3

shali3 commented Jun 17, 2015

Copy link
Copy Markdown

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

@perpantha

Copy link
Copy Markdown

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

@vejandla

vejandla commented Mar 2, 2018

Copy link
Copy Markdown

Does this work with iframe requests?

@thatsuperdev

Copy link
Copy Markdown

@vejandla: Nope. It doesn't.

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