2013-08-15 19 views
6

私は変更できないいくつかのスクリプトを含むプロジェクトに取り組んでいます。これらのスクリプトは、AJAX経由でページを更新します。アップデートが完了したら、私はいくつかのコードを実行する必要があります。XMLHttpRequestが完了したときに関数を実行するにはどうすればよいですか?

XMLHttpRequestが完了したときに発生するイベントはありますか? (または任意のXMLHttpRequest状態の変更?)。

残念ながら、リクエストに使用された特定のXMLHttpRequestオブジェクトにアクセスできません。

おかげで、

+4

上記のajax専用にjQueryを使用している場合は、そうです。 ajaxComplete。 –

+0

@あなたのコントロール下にないスクリプトがjQuery ajaxに依存している場合にのみ、KevinBの提案がうまくいくでしょう。 – Christophe

+0

@Christophe KevinBのコメントによると、「jQueryを専ら** ajax **のために使用している場合、 – Ian

答えて

15

のjQueryがなければ、あなたはXHRオブジェクトがopen EDである時に各XHRオブジェクトのreadystatechangeイベントのリスナーを添付するopenメソッドをフックすることができます。すべてのAjaxが発生する前に、次のコードが実行されることを確認:あなたが唯一の成功loadイベントを心配している場合

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

あるいは、あなたはreadystatechangeするのではなく、そのイベントのリスナーことができます。

+0

素晴らしいです、それは完璧に動作します! – MCM

関連する問題