2011-10-15 9 views
10

XMLHttpRequest.open() yöntemini nasıl geçersiz kılabilir ve sonra bu argümanları yakalayabilir ve değiştirebilir miyim?Javascript: XMLHttpRequest.open'i geçersiz kılma()

(function() { 
    var proxied = window.XMLHttpRequest.open; 
    window.XMLHttpRequest.open = function() { 
     $('.log').html(arguments[0]); 
     return proxied.apply(this, arguments); 
    }; 
})(); 
+0

Neyi başarmaya çalışıyorsunuz? – rwilliams

+0

Adresi yeniden yönlendirmek için tüm isteklerde XMLHttpRequest.open() işlevinin ikinci bağımsız değişkenini değiştirmek istiyorum. – Trevor

+0

İkinci bağımsız değişken için bazı 'global' değişkenini kullanamazdınız. – rwilliams

cevap

28

XMLHttpRequest objects tarafından devralınan open yöntemini değiştirmiyorsunuz, ancak aslında hiç kullanılmamış olan XMLHttpRequest constructor'a bir yöntem eklemektesiniz.

ben facebook bu kodu çalıştı ve ben isteklerini yakalamak başardı:

(function() { 
    var proxied = window.XMLHttpRequest.prototype.open; 
    window.XMLHttpRequest.prototype.open = function() { 
     console.log(arguments); 
     return proxied.apply(this, [].slice.call(arguments)); 
    }; 
})(); 

/* 
    ["POST", "/ajax/chat/buddy_list.php?__a=1", true] 
    ["POST", "/ajax/apps/usage_update.php?__a=1", true] 
    ["POST", "/ajax/chat/buddy_list.php?__a=1", true] 
    ["POST", "/ajax/canvas_ticker.php?__a=1", true] 
    ["POST", "/ajax/canvas_ticker.php?__a=1", true] 
    ["POST", "/ajax/chat/buddy_list.php?__a=1", true] 
*/ 

Yani evet açık yöntem XMLHttpRequest prototype (window.XMLHttpRequest.prototype) ilave olarak alınması gerektiğinden XMLHttpRequest constructor (window.XMLHttpRequest)

2

google koduna xmlhttprequest project verecek bir göz: Açık aşırı kurtulmak XMLHttpRequest() çağrıldığında çıkarmadan rağmen

Zaten vekil yöntemi denedim ama işe yaramadı. XMLHttpRequest nesnesini düzgün bir şekilde geçersiz kılan oldukça iyi bir örnek. Kaynak here görülebilir.

2

XMLHttpRequest.prototype.open kullanın.