2012-03-14 10 views
8

Tôi đang cố đăng nhập (và sau đó sửa đổi) dữ liệu XMLHttpRequest gửi đến máy chủ bằng cách ghi đè chức năng gửi của XMLHttpRequest. Chức năng của tôi ghi lại dữ liệu chính xác đến bàn điều khiển, nhưng yêu cầu không kết thúc, do đó trình duyệt tiếp tục chờ phản hồi vô thời hạn. Bất kỳ ý tưởng gì sai với mã?Ghi đè phương thức gửi của XMLHttpRequest

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

Bản sao có thể có của http://stackoverflow.com/questions/4410218/trying-to-keep-track-of-number-of-outstanding-ajax-requests-in-firefox –

Trả lời

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

Cảm ơn, điều đó thật đơn giản. – user1268760

18

Bạn đã quên this:

this.realSend(vData); 

Tuy nhiên, bạn không cần phải thêm một phương pháp mới để nguyên mẫu:

var send = XMLHttpRequest.prototype.send; 

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

Sử dụng đóng cửa, bạn cũng có thể tránh giả mạo biến:

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

Cảm ơn bạn đã đề xuất đóng cửa, mã dường như sạch hơn rất nhiều theo cách đó. – user1268760

+3

[Dấu chấm than làm gì trước hàm?] (Http://stackoverflow.com/q/3755606/238421) –