簡體   English   中英

更改JavaScript原型上的功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM