Переопределение метода отправки XMLHttpRequest
Я пытаюсь войти (и позже изменить) данные, которые XMLHttpRequest отправляет на сервер, переопределив функцию отправки XMLHttpRequest. Моя функция правильно записывает данные в консоль, но запрос не завершается, поэтому браузер продолжает ждать ответа неопределенно долго. Есть идеи, что не так с кодом?
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) { console.log("data: " + vData); realSend(vData); };
XMLHttpRequest.prototype.send = newSend;
2 ответов
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
// here "this" points to the XMLHttpRequest Object.
var newSend = function(vData) { console.log("data: " + vData); this.realSend(vData); };
XMLHttpRequest.prototype.send = newSend;
вы забыли this
:
this.realSend(vData);
однако вам не нужно добавлять новый метод в прототип:
var send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(data) {
send.call(this, data);
}
используя закрытие, вы также можете избежать переменных-изгоев:
!function(send){
XMLHttpRequest.prototype.send = function (data) {
send.call(this, data);
}
}(XMLHttpRequest.prototype.send);