yayQuery ポッドキャストのエピソード11では $。ajaxコンテキストオプション に言及しています。成功コールバックでこのオプションを使用するにはどうすればよいですか?私が現在していることは、成功/エラーの後に呼び出されたIDをアニメーション化できるように、入力パラメータを成功コールバックに渡すことです。コンテキストオプションを使用する場合、おそらく、呼び出されたルーチンからパラメーターを戻す必要はありません。
この例では、STATEIDを成功フィールドに返し、データベースから削除された状態がDOMから削除されるようにします。
$('td.delete').click(function() {
var confirm = window.confirm('Are you sure?');
if (confirm) {
var StateID = $(this).parents('tr').attr('id');
$.ajax({
url: 'Remote/State.cfc',
data: {
method: 'Delete',
'StateID': StateID
},
success: function(result) {
if (result.MSG == '') {
$('#' + result.STATEID).remove();
} else {
$('#msg').text(result.MSG).addClass('err');;
};
}
});
}
});
context
は、コールバックでthis
の値を設定するだけです。
したがって、イベントハンドラーにいて、コールバック内のthis
をイベントを受信した要素にしたい場合は、次のようにします。
context:this,
success:function() {
// "this" is whatever the value was where this ajax call was made
}
他の型にしたい場合は、それを設定するだけで、this
はそれを参照します:
context:{some:'value'},
success:function() {
// "this" the object you passed
alert( this.some ); // "value"
}
質問に追加したコードでは、StateID
を使用できますが、既にその変数にアクセスできるので、実際には必要ありません。
var StateID = $(this).parents('tr').attr('id');
$.ajax({
url: 'Remote/State.cfc'
,data: {
method:'Delete'
,'StateID':StateID
}
,context: StateID
,success: function(result){
alert(this); // the value of StateID
alert(StateID); // same as above
if (result.MSG == '') {
$('#' + result.STATEID).remove();
} else {
$('#msg').text(result.MSG).addClass('err');;
};
}
});
コンテキストオプションを設定すると、成功したthis
は、context
の値として設定したものになります。したがって、入力パラメーターの名前と値を含むオブジェクトリテラルをコンテキストとして渡すと、成功するとthis.param1
最初の入力パラメーターの値を取得します。
詳細については、 。ajax() のドキュメントを参照してください。