web-dev-qa-db-ja.com

$ .ajaxコンテキストオプション

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');;
        };
      }
    });
  }
});
61
Phillip Senn

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');;
        };
    }
});
120
user113716

コンテキストオプションを設定すると、成功したthisは、contextの値として設定したものになります。したがって、入力パラメーターの名前と値を含むオブジェクトリテラルをコンテキストとして渡すと、成功するとthis.param1最初の入力パラメーターの値を取得します。

詳細については、 。ajax() のドキュメントを参照してください。

11
justkt