2013-08-15 16 views
6

Pracuję nad projektem, który ma kilka skryptów, których nie mogę zmienić. Te skrypty aktualizują stronę za pośrednictwem AJAX. Po zakończeniu aktualizacji muszę uruchomić kod.Jak uruchomić funkcję po zakończeniu dowolnego żądania XMLHttpRequest?

Czy jest jakieś zdarzenie uruchamiane po zakończeniu dowolnego żądania XMLHttpRequest? (lub dowolna zmiana stanu XMLHttpRequest?).

Niestety nie mogę uzyskać dostępu do konkretnego obiektu XMLHttpRequest używanego do wykonania żądania.

Dzięki,

+4

Jeśli używasz jQuery wyłącznie dla wspomnianego ajax, tak. ajaxComplete. –

+0

@ Sugestia KevinB działałaby tylko wtedy, gdy skrypty, które nie są pod Twoją kontrolą, polegają na jQuery ajax. – Christophe

+0

@Christophe Tak mówi komentarz KevinB - "Jeśli używasz jQuery wyłącznie dla ** wspomnianego ajax **,' – Ian

Odpowiedz

15

Bez jQuery, można podłączyć metodę open dołączenia słuchacza dla każdego obiektu XHR za readystatechange wydarzeń w czasie przedmiotem XHR jest open ed. Zapewniają, że kod działa zanim wystąpi Ajax:

// save the real open 
var oldOpen = XMLHttpRequest.prototype.open; 

function onStateChange(event) { 
    // fires on every readystatechange ever 
    // use `this` to determine which XHR object fired the change event 
} 

XMLHttpRequest.prototype.open = function() { 
    // when an XHR object is opened, add a listener for its readystatechange events 
    this.addEventListener("readystatechange", onStateChange) 

    // run the real `open` 
    oldOpen.apply(this, arguments); 
} 

Ewentualnie, jeśli tylko dbają o udanych load zdarzeń, można słuchacza w tym przypadku zamiast readystatechange.

+0

Awesome, to działa idealnie! – MCM

Powiązane problemy