2012-03-14 10 views
8

Sto tentando di registrare (e successivamente modificare) i dati che XMLHttpRequest invia a un server sovrascrivendo la funzione di invio di XMLHttpRequest. La mia funzione registra i dati correttamente nella console, ma la richiesta non finisce, quindi il browser continua ad aspettare la risposta indefinitamente. Qualche idea su cosa c'è che non va nel codice?Sovrascrittura del metodo di invio di XMLHttpRequest

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

Possibile duplicato di http://stackoverflow.com/questions/4410218/trying-to-keep-track-of-number-of-outstanding-ajax-requests-in-firefox –

risposta

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

Grazie, è certo semplice. – user1268760

18

hai dimenticato this:

this.realSend(vData); 

Tuttavia, non c'è bisogno di aggiungere un nuovo metodo per il prototipo:

var send = XMLHttpRequest.prototype.send; 

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

Utilizzando la chiusura, si può anche evitare canaglia variabili:

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

Grazie per il suggerimento di chiusura, il il codice sembra molto più pulito in questo modo. – user1268760

+3

[Cosa fa il punto esclamativo prima della funzione?] (Http://stackoverflow.com/q/3755606/238421) –

Problemi correlati