Переопределение метода отправки XMLHttpRequest - PullRequest
8 голосов
/ 14 марта 2012

Я пытаюсь записать (и позже изменить) данные, которые XMLHttpRequest отправляет на сервер, переопределив функцию отправки XMLHttpRequest.Моя функция корректно записывает данные на консоль, но запрос не завершается, поэтому браузер продолжает ждать ответа бесконечно долго.Есть идеи, что не так с кодом?

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) { console.log("data: " + vData); realSend(vData); };
XMLHttpRequest.prototype.send = newSend;

Ответы [ 2 ]

19 голосов
/ 14 марта 2012

Вы забыли 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);
17 голосов
/ 14 марта 2012
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...