2
我想更改XMLHttpRequest發送函數,以便在請求完成之前和請求完成之後調用一個函數。以下是我迄今爲止:在javascript原型上更改函數
var oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
//this never gets called
oldOnReady = this.onreadystatechange;
this.onreadystatechange = function() {
oldOnReady();
ajaxStopped();
}
ajaxStarted();
// according to http://www.w3.org/TR/XMLHttpRequest/
// there's only ever 0 or 1 parameters passed into this method
if(arguments && arguments.length > 0) {
oldSend(arguments[0]); //gets to here, calls this method, then nothing happens
} else {
oldSend();
}
}
function ajaxStarted() {
ajaxCount++;
document.getElementById("buttonClicky").innerHTML = "Count: " + ajaxCount;
}
function ajaxStopped() {
$("#isRunning")[0].innerHTML = "stopped";
ajaxCount--;
document.getElementById("buttonClicky").innerHTML = "Count: " + ajaxCount;
}
不過,我在這裏做得不對,因爲一旦它擊中oldSend()
調用,它永遠不會返回或觸發事件onreadystatechange
。所以我必須在這裏做些錯誤的點擊錯誤。有任何想法嗎?我設置了一個斷點,當我打電話時它被擊中就好了:
$.ajax({
type: "GET",
url: "file.txt",
success: function(result) {
//this never gets called
document.getElementById("myDiv").innerHTML = result;
}
});
所以我的新功能被調用。我想只是不知道如何調用舊功能。關於如何解決這段代碼的任何想法,以便實際製作Ajax請求並調用我的新回調?
注:我知道基本上這樣做的JQuery事件。但是我正在這樣做,所以我可以使用它來處理任何Ajax調用(Mootools,GWT等)。我正在用Jquery測試它。
所以將我這樣做:'oldSend.call(此,參數[0]);'或是有更好的方法,我可以只是傳遞參數陣列中?從而消除了if語句。 – Joel 2010-11-21 01:55:42
你可以使用'.apply()',它將一個數組作爲第二個參數。 – 2010-11-21 01:59:03
謝謝,效果很棒! – Joel 2010-11-21 03:17:54