Farklı JS kitaplıklarına (AngularJS, OpenLayers, ...) sahip bir web uygulaması oluşturuyorum ve günlüğe kaydedilen kullanıcı oturumunun sona ermesi durumunda (yanıt 401 Unauthorized
durumla birlikte geri gelir ), onu yeniden yönlendirmek için tüm AJAX yanıtlarını yakalamanın bir yoluna ihtiyacım var giriş sayfasına.
AngularJS'nin interceptors
bu tür senaryoları yönetmeyi teklif ettiğini biliyorum , ancak OpenLayers isteklerine bu tür bir enjeksiyon gerçekleştirmenin bir yolunu bulamadım. Bu yüzden vanilya JS yaklaşımını tercih ettim.
İşte bu kod parçasını buldum ...
(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);
... uyarladığım ve beklendiği gibi davrandığını gördüm (yalnızca son Google Chrome'da test etti).
XMLHTTPRequest'in prototipini değiştirirken, bunun ne kadar tehlikeli sonuçlanabileceğini veya ciddi performans sorunlarına yol açıp açmayacağını merak ediyorum. Ve bu arada geçerli bir alternatif olabilir mi?
Güncelleme: İstekler gönderilmeden önce nasıl müdahale edilir?
Önceki numara iyi çalışıyor. Peki ya aynı senaryoda, istek gönderilmeden önce bazı başlıklar eklemek isterseniz? Aşağıdakileri yapın:
(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);