我想更改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
事件。所以我必须在这里做点错误。有任何想法吗?我设置了一个断点,当我打电话给它时它会被击中:
$.ajax({
type: "GET",
url: "file.txt",
success: function(result) {
//this never gets called
document.getElementById("myDiv").innerHTML = result;
}
});
所以我的新功能被调用了。我想只是不知道如何调用旧函数。有关如何修复此代码的任何想法,以便实际发出Ajax请求并调用我的新回调吗?
注意:我知道基本上这样做的JQuery事件。但我这样做,所以我可以使用任何Ajax调用(Mootools,GWT等)。我正好用Jquery来测试它。
答案 0 :(得分:4)
您需要在old
。
this
个函数
例如:oldSend.call(this)