2013-08-15 4 views
6

Sto lavorando a un progetto con diversi script che non posso modificare. Questi script aggiornano la pagina tramite AJAX. Quando l'aggiornamento è completo, ho bisogno di eseguire del codice.Come eseguire una funzione quando una richiesta XMLHttpRequest è completa?

C'è qualche evento che si attiva quando una richiesta XMLHttpRequest è completa? (o qualsiasi cambiamento di stato XMLHttpRequest?).

Purtroppo non riesco ad accedere allo specifico oggetto XMLHttpRequest utilizzato per effettuare la richiesta.

Grazie,

+4

Se stai usando jQuery esclusivamente per detto ajax, sì. ajaxComplete. –

+0

Il suggerimento di @ KevinB funzionerà solo se gli script che non sono sotto il tuo controllo si basano su jQuery ajax. – Christophe

+0

@Christophe Questo è ciò che dice il commento di KevinB: "Se usi jQuery esclusivamente per ** ha detto ajax **," – Ian

risposta

15

Senza di jQuery, è possibile agganciare il metodo open per collegare un listener per readystatechange eventi di ciascun oggetto XHR al momento l'oggetto XHR è open ed. Assicurarsi che il seguente codice viene eseguito prima che si verifichi qualsiasi 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); 
} 

In alternativa, se vi interessa soltanto successo load eventi, è possibile listener per tale evento, invece di readystatechange.

+0

Fantastico, funziona perfettamente! – MCM