Перехват событий в ajax
Сайт использует Jquery и кучу уже написанных скриптов (не мной), и что то там править совершенно не хочется. По клику на кнопку уходит аякс, а вот с его результатом мне надо "поработать" (условно права на файлы которые есть для меня 0444).
Может есть какой нибудь глобальный объект (такого не нагуглил), с обработчиками для сетевых событий? Есть возможность перехватить onload? Или какие есть еще варианты решения?
Ответы (1 шт):
Автор решения: Jarry Roxwell
→ Ссылка
Статья на Хабре натолкнула меня на идею. Унаследоваться от оригинального класса и заменить его. Знаю так делать не хорошо, но это работает.
(() => {
class C_XMLHttpRequest extends XMLHttpRequest {
static handlee = {};
static original;
constructor() {
super();
self;
return new Proxy(this, {
get: (target, prop, receiver) => {
return typeof target[prop] == 'function' ? target[prop].bind(target) : target[prop];
},
set: (target, prop, val, receiver) => {
if(C_XMLHttpRequest.handlee.hasOwnProperty(prop))
target[prop] = () => {
C_XMLHttpRequest.handlee[prop].call(this, ...arguments);
val( ...arguments);
}
else
target[prop] = val;
return true;
}
});
}
}
C_XMLHttpRequest.original = XMLHttpRequest;
window.XMLHttpRequest = C_XMLHttpRequest;
})();
(() => {
window.XMLHttpRequest.handlee.onload = function(){
console.log(`Хехех, перехватил ${this.response.length} байт`);
}
})();
(() => {
let xhr = new XMLHttpRequest();
xhr.open('GET', '/');
xhr.send();
xhr.onload = function() {
if (xhr.status != 200) {
console.log(`Ошибка ${xhr.status}: ${xhr.statusText}`);
} else {
console.log(`Готово, получили ${xhr.response.length} байт`);
}
};
})();