web-dev-qa-db-ja.com

AJAX動作からの完全なイベントを聞く

AJAXボタンが付いたフォームがあります。クリックすると、予想どおり多くのものが更新されますが、これで問題ありません。

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

ありがとう

12
Paul Sheldrake

はいあります :

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
    }
  });
 }
}
19
Countzero

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

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

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;

        }
    }

});
11
user1193694

なしDrupal 7.24、jQuery 1.11およびビューで私のために働いた特定のソリューション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'をビューのマシン名に置き換えます。

4
Larzan