Abfangen aller AJAX-Anforderungen von verschiedenen JS-Bibliotheken

Ich erstelle eine Web-App mit verschiedenen JS-Bibliotheken (AngularJS, OpenLayers, ...) und brauche eine Möglichkeit, um alle AJAX-Antworten abfangen zu können, falls die protokollierte Benutzersitzung abgelaufen ist (Rückantwort mit)401 Unauthorized status), um ihn auf die Anmeldeseite umzuleiten.

Ich kenne AngularJS-Angeboteinterceptors um solche Szenarien zu managen, konnte aber keinen Weg finden, um eine solche Injektion in OpenLayers-Anfragen zu erreichen. Also habe ich mich für einen Vanille-JS-Ansatz entschieden.

Hier Ich habe diesen Code gefunden ...

(function(open) {

    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {

        this.addEventListener("readystatechange", function() {
            console.log(this.readyState); // this one I changed
        }, false);

        open.call(this, method, url, async, user, pass);
    };

})(XMLHttpRequest.prototype.open);

... was ich angepasst habe und anscheinend so aussieht, als ob es sich wie erwartet verhält (nur auf dem letzten Google Chrome getestet).

Da es den Prototyp von XMLHTTPRequest modifiziert, frage ich mich, wie gefährlich dies sein könnte oder ob es ernsthafte Leistungsprobleme verursachen könnte. Und übrigens, gäbe es eine gültige Alternative?

Update: wie Anfragen abgefangen werden, bevor sie gesendet werden

Der vorherige Trick funktioniert in Ordnung. Aber was ist, wenn Sie im selben Szenario einige Header einfügen möchten, bevor die Anfrage gesendet wird? Mach Folgendes:

(function(send) {

    XMLHttpRequest.prototype.send = function(data) {

        // in this case I'm injecting an access token (eg. accessToken) in the request headers before it gets sent
        if(accessToken) this.setRequestHeader('x-access-token', accessToken);

        send.call(this, data);
    };

})(XMLHttpRequest.prototype.send);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage