![](/img/trans.png)
[英]JavaScript: change a variable with a prototype function inside the constructor
[英]Change function on javascript prototype
我想更改XMLHttpRequest發送函數,以便在發出請求之前和完成請求之后調用一個函數。 這是我到目前為止的內容:
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
事件。 所以我一定在這里做錯了clickclickCount錯誤。 有任何想法嗎? 我設置了一個斷點,當我將其稱為:
$.ajax({
type: "GET",
url: "file.txt",
success: function(result) {
//this never gets called
document.getElementById("myDiv").innerHTML = result;
}
});
所以我的新函數被調用了。 我猜只是不知道如何調用舊函數。 關於如何修復此代碼以便實際發出Ajax請求並調用我的新回調的任何想法?
注意:我知道本質上是這樣做的JQuery事件。 但是我這樣做是為了讓它可以與任何Ajax調用(Mootools,GWT等)一起使用。 我正巧用Jquery測試它。
您需要在this
的上下文中調用old
函數。
例如:oldSend.call(this)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.