2016-06-30 5 views
1

this fiddleを参照してください。グローバルAJAXリスナを使用してAJAXコールのソースを取得することはできますか?

私は、次のコードをお持ちの場合:AJAXを発射ボタンのIDを渡すために

$("button").click(function(event) { 
    var targetId = event.target.id; 
    $.ajax({ 
    type: "GET", 
    url: "https://fiddle.jshell.net", 
    success: function(data) { 
     alert('target id is: ' + targetId); 
    } 
    }); 
}); 

// Is it possible for this to work the same as the above somehow? 
$(document).ajaxSuccess(function(event, xhr, ajaxOptions, data) { 
    var targetId = event.target.id; // Event.target is `document` so does not work 
    alert('target id is: ' + targetId); // I want this to be the same alert as above. 
}); 

ことが可能です:

HTML:

<div class="button-wrapper"> 
    <button id='firstButton'> 
    first button 
    </button> 
    <button id='secondButton'> 
    second button 
    </button> 
</div> 

JSをグローバルリスナー($(document).ajaxSuccess)に電話をかけますか?

+0

この質問の "グローバル" の部分は、おそらく悪い考えです。 '$ .ajax'を使ったライブラリを後で持ってきた人は、物事を混乱させるでしょう。 – 4castle

+0

@ 4castle私は確信していません - おそらく私の質問は明確ではありませんか?グローバルイベントハンドラ用のjQueryライブラリ(https://api.jquery.com/category/ajax/global-ajax-event-handlers/)全体が、最初の場所。私はjQueryがその質問のための十分な大きさの図書館であり、適切に計量され、適切に答えられているように感じています。何か不足していますか? – YPCrumble

+0

私は、*すべて* ajaxリクエストへのIDチェックのための追加のイベントハンドラを追加すると、ajaxリクエストを頻繁に使用するアプリケーションでは過度の負荷になると懸念しています。 ajaxリクエストの一部だけにidを持つDOMエレメントが関連付けられます。ある程度、それは好みの問題です。私は、いつどのようなコードが実行されるかを明示したい人のような人です。 – 4castle

答えて

3

確かに、そしてAjaxのオプションから引き出し、Ajaxのオプションと一緒にそれを渡します。

http://jsfiddle.net/tsmknfr2/6

$("button").click(function(e) { 
    var targetId = event.target.id; 
    $.ajax({ 
    type: "GET", 
    url: "https://fiddle.jshell.net", 
    success: function(data) { 
     alert('target id is: ' + targetId); 
    }, 
    foop: targetId 
    }); 
}); 

// Is it possible for this to work the same as the above somehow? 
$(document).ajaxSuccess(function(event, xhr, ajaxOptions, data) { 
    var targetId = ajaxOptions.foop; 
    alert('target id is: ' + targetId); 
}); 
+0

真実、私は少し怠け者でした。少なくとも私は最初の行を使っていませんでした。 –

+0

私はこの解決策が本当に好きです - これは悪い習慣か完全にOKですか? – YPCrumble

+0

何か他の人が使用する可能性のあるプロパティ名を使用していない限り、それは完璧です。 –

1

事前にバインディングにオプトインする関数を定義できます。この機能は、コールバックの前にアラートを最初に実行するたびに使用できます。機能にアクセスする予定のフィールドは、$.ajaxオプションに含めます。

グローバル$.ajaxキャッチャーを持っているか、またはidがないページのすべてのajaxリクエストを汚染しないので、$.ajax機能自体を変更するよりも優れています。

function ajaxCallback(callback) { 
    return function() { 
    // "this" will be the object you passed to "$.ajax" 
    alert("target id is: " + this.targetId); 
    callback && callback.apply(this, arguments); 
    } 
} 

$("button").click(function(event) { 
    $.ajax({ 
    type: "GET", 
    url: "/echo/json/", 
    success: ajaxCallback(function(data, status, xhr) { 
     // success handler here 
    }), 
    targetId: event.target.id 
    }); 
}); 

JSFiddle

関連する問題