2012-03-14 12 views
8

Estoy intentando registrar (y luego modificar) los datos que XMLHttpRequest envía a un servidor anulando la función de envío de XMLHttpRequest. Mi función registra los datos correctamente en la consola, pero la solicitud no finaliza, por lo que el navegador sigue esperando la respuesta indefinidamente. Alguna idea de lo que está mal con el código?Reemplazando el método de envío de XMLHttpRequest

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

Posible duplicado de http://stackoverflow.com/questions/4410218/trying-to-keep-track-of-number-of-outstanding-ajax-requests-in-firefox –

Respuesta

16
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; 
+0

Gracias, eso seguro fue simple. – user1268760

18

error se han olvidado this:

this.realSend(vData); 

Sin embargo, no es necesario añadir un nuevo método para el prototipo:

var send = XMLHttpRequest.prototype.send; 

XMLHttpRequest.prototype.send = function(data) { 
    send.call(this, data); 
} 

Usando el cierre, también puede evitar la picaresca variables:

!function(send){ 
    XMLHttpRequest.prototype.send = function (data) { 
     send.call(this, data); 
    } 
}(XMLHttpRequest.prototype.send); 
+1

Gracias por la sugerencia de cierre, el el código parece mucho más limpio de esa manera. – user1268760

+3

[¿Qué hace el signo de exclamación antes de la función?] (Http://stackoverflow.com/q/3755606/238421) –

Cuestiones relacionadas