2012-03-14 3 views
8

XMLHttpRequest가 XMLHttpRequest의 send 함수를 재정 의하여 서버에 보내는 데이터를 로그하고 나중에 수정하려고합니다. 내 기능은 데이터를 콘솔에 올바르게 기록하지만 요청이 끝나지 않아 브라우저가 응답을 무기한 대기합니다. 어떤 아이디어가 코드에 문제가 있습니까?XMLHttpRequest의 send 메서드를 재정의합니다.

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

가능한 한 http://stackoverflow.com/questions/4410218/trying-to-keep-track-of-number-of-outstanding-ajax-requests-in-firefox –

답변

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

감사합니다. – user1268760

18

님의 this 잊은 : 당신은 또한 불량을 방지 할 수 있습니다

var send = XMLHttpRequest.prototype.send; 

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

가 폐쇄 사용 :

this.realSend(vData); 

는 그러나 프로토 타입에 새로운 방법을 추가 할 필요가 없습니다 변수 :

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

폐지 제안을 주셔서 감사합니다. 코드가 그렇게 깨끗해 보입니다. – user1268760

+3

[느낌표는 기능 전에 무엇을합니까?] (http://stackoverflow.com/q/3755606/238421) –

관련 문제