2013-08-15 17 views
6

Ich arbeite an einem Projekt mit mehreren Skripten, die ich nicht ändern kann. Diese Skripte aktualisieren die Seite über AJAX. Wenn das Update abgeschlossen ist, muss ich etwas Code ausführen.Wie führe ich eine Funktion aus, wenn XMLHttpRequest abgeschlossen ist?

Gibt es ein Ereignis, das ausgelöst wird, wenn XMLHttpRequest abgeschlossen ist? (oder eine Änderung des XMLHttpRequest-Status?).

Leider kann ich nicht auf das spezifische XMLHttpRequest-Objekt zugreifen, das für die Anforderung verwendet wird.

Danke,

+4

Wenn Sie jQuery ausschließlich für diesen Ajax verwenden, ja. AjaxComplete. –

+0

@ KevinB Vorschlag würde nur funktionieren, wenn die Skripte, die nicht unter Ihrer Kontrolle sind auf jQuery AJAX verlassen. – Christophe

+0

@Christophe Das ist, was KevinB's Kommentar sagt - 'Wenn Sie jQuery ausschließlich für ** sagte Ajax **,' – Ian

Antwort

15

Ohne jQuery, können Sie die open Methode Haken einen Listener für jedes XHR-Objekt readystatechange Ereignisse zum Zeitpunkt des XHR Objekt ist open ed zu befestigen. Sicherstellen, dass der folgende Code ausgeführt wird, bevor eine Ajax auftritt:

// 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); 
} 

Alternativ, wenn Sie nur über erfolgreiche load Ereignisse kümmern, können Sie für dieses Ereignis statt readystatechange Zuhörer.

+0

Super, das funktioniert perfekt! – MCM

Verwandte Themen