Я хочу изменить функцию отправки 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.