2012-03-14 13 views
8

मैं डेटा को लॉग (और बाद में संशोधित) करने का प्रयास कर रहा हूं XMLHttpRequest XMLHttpRequest के प्रेषण फ़ंक्शन को ओवरराइड करके सर्वर पर भेजता है। मेरा फ़ंक्शन कंसोल पर डेटा को सही तरीके से लॉग करता है, लेकिन अनुरोध समाप्त नहीं होता है, इसलिए ब्राउज़र अनिश्चित काल तक प्रतिक्रिया का इंतजार करता रहता है। कोई विचार कोड के साथ क्या गलत है?XMLHttpRequest की प्रेषण विधि को ओवरराइड करना

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) –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^