XMLHttpRequest gönderme işlevini değiştirmek istiyorum, böylece istek yapılmadan ve istek tamamlandıktan sonra bir işlev çağrılır.Javascript prototipindeki işlevi değiştirme
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;
}
Ancak oldSend()
çağrıyı vurur kez asla geri döner veya onreadystatechange
olayı tetikler çünkü burada yanlış bir şey yapıyorum: İşte ben bugüne kadar ne var. Bu yüzden burada yanlış birşeyler yapmalıyım. Herhangi bir fikir? Bir kesme noktası ayarlamak ve bu çağırdığınızda gayet çarpıyor:
$.ajax({
type: "GET",
url: "file.txt",
success: function(result) {
//this never gets called
document.getElementById("myDiv").innerHTML = result;
}
});
Yani benim yeni işlev
denir oluyor. Sanırım eski işlevi nasıl arayacağımı bilmiyorum. Bu kodun nasıl düzeltileceğine dair herhangi bir fikir Ajax İsteği gerçekten yapılır ve yeni geriçağırım çağrılır?Not: Aslında bunu yapan JQuery olaylarının farkındayım. Ama bunu yapıyorum, böylece herhangi bir Ajax çağrısı ile çalışabilirim (Mootools, GWT, vb.). Sadece Jquery ile test etmek için yaşıyorum.
bu yüzden bu yapacağını: 'oldSend.call (bu, bağımsız değişkenler [0]);' ya da sadece argümanlar dizi geçebilir daha iyi bir yolu yoktur ? Böylece if deyimini ortadan kaldırarak. – Joel
İkinci parametre olarak bir dizi alan .apply() 'işlevini kullanabilirsiniz. –
Teşekkürler, harika çalışıyor! – Joel