1
我有這段代碼覆蓋了XMLHttpRequest的發送函數。覆蓋XMLHttpRequest的發送函數
var sendOrig = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
var args = arguments;
var self = this;
setTimeout(function() {
// Do something.
self.addEventListener("readystatechange", function() {
if(this.readyState == 4) {
// Do something else.
}
});
sendOrig.apply(self, args);
}, 0);
}
在這種情況下,事件監聽器是堆積起來還是會收集垃圾?如果不是,我將如何實現這一目標?
我重寫的XMLHttpRequest的原因是因爲我想通過jQuery或其他一些庫中直接調用XMLHttpRequest的發送功能做一些事情,每次東西發送到服務器,無論是。我如何用你的代碼實現這個目標? – Strudel
如果您希望在發送AJAX請求或收到響應之前/之後執行某些操作,那麼您的問題中包含正確的代碼。我的代碼只是爲了解釋如何在改變它之後使用XHR。如果您使用庫或框架(jQuery,ExtJS等),它們應該已經能夠正確使用它,並且應該沒有問題。 –
無論如何,如果你使用框架,你應該看看它的文檔,以更好的方式來達到這個目的,而不是搞亂香草JS。例如,jQuery有很多AJAX事件可以使用:http://api.jquery.com/category/ajax/global-ajax-event-handlers/和ExtJs:http://www.objis.com/formationextjs /lib/extjs-4.0.0/docs/api/Ext.Ajax.html#events –