ビヘイビアーからAJAX completeイベントをリッスンします


12

AJAXボタンがあるフォームがあります。クリックすると、期待通りに大量のものが更新されます。

AJAX呼び出しが完了したときに呼び出される動作でリスナーを作成する方法があるかどうか疑問に思っていましたか?

ありがとう

回答:


19

はいあります :

Drupal.behaviors.YourBehaviour = {
attach: function(context, settings) {  
  $('#yourform').ajaxComplete(function(event, xhr, settings) {
    if ($(event.target.id) == 'the-id-of-your-item') {
      // Your code here
    }
  });
 }
}

2
+1。ただし、Drupal 7の場合はDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
クライブ

あなたは正しい:貼り付け中に行を忘れてしまった!
カウントゼロ

2
この$()は必要ありません。event.target.idだけでオブジェクトを参照していません。
ニコラ

Drupalの動作でそれをラップするのはなぜですか?
ram4nd

1
これは、ベストプラクティスと見なされており、特に名前空間の衝突を防ぐためです。
カウントゼロ

11

jQuery 1.8+のバージョンでは、フォームまたはビュー自体ではなく、ドキュメントに.ajaxComplete関数を添付する必要があるようです(http://api.jquery.com/ajaxcomplete/を参照)

次は、D7でJquery 1.10とViews 7.x-3.8で機能しました。ここで、「your_view_id」は、ビューの「その他」設定パネルで設定されたビューのマシン名です。イベント、xhr、およびキーオフする設定には他にも多くの情報があり、ajaxの結果が目的のビューのものかどうかを判断しますが、これは私の状況ではうまくいきました:

jQuery(document).ajaxComplete(function(event, xhr, settings) {
    if(typeof settings.extraData != 'undefined' && typeof settings.extraData.view_display_id != 'undefined') {

        switch(settings.extraData.view_display_id){

            case "your_view_id":

                console.log('your_view_id ajax results!');

                break;

            default:

                console.log('some other ajax result...');

                break;

        }
    }

});

4

与えられたソリューションはどれDrupal 7.24、jQuery 1.11Views 7.x-3.8 ではうまくいきませんでした。

user1193694提案することは悪くはなかったが、私が受信した設定オブジェクトがありませんでした extraDataのパラメータを。

設定オブジェクトを解析するとき、settings.dataプロパティに「view_name =」とビューのマシン名が含まれていることがわかりました。

jQuery(document).ajaxComplete(function(event, xhr, settings) {

    // see if it is from our view
    if (settings.data.indexOf( "view_name=your_views_name") != -1) {

            console.log('your_view_id ajax results!');

    }
});

' your_views_name 'をビューのマシン名に置き換えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.