gpt4 book ai didi

javascript - 更改 javascript 原型(prototype)上的函数

转载 作者:行者123 更新时间:2023-11-29 18:34:53 25 4
gpt4 key购买 nike

我想更改 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 事件。所以我一定是在这里做错了 somethingclickCount。有任何想法吗?我设置了一个断点,当我调用它时它被击中了:

$.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)

关于javascript - 更改 javascript 原型(prototype)上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4235998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com