[jQuery] $.ajaxのコールバック関数にcontextで値を渡す
スポンサーリンク
jQueryの$.ajax
メソッドのコールバック関数の引数はあらかじめ決まっています。done
メソッドならdata, textStatus, jqXHR
が渡されます。
では、コールバック関数に任意の値を渡したい場合はどうすれば良いか?
// “ホゲホゲ”をコールバック関数に渡したいが… var a = 'ホゲホゲ'; $.ajax({ url:'foo.html', type:'GET', dataType:'jsonp', }).done(function(data, textStatus, jqXHR){ // コールバック関数の引数はあらかじめ決まっている // ではどうすれば良いか? });
この場合はcontext
を使います。$.ajax
メソッドのオプションでcontext
を指定すると、その値がコールバック関数内のthis
として受け取れるようになります。
$.ajax({ url:'foo.html', type:'GET', dataType:'jsonp', context:'ホゲホゲ',// contextを指定する }).done(function(data, textStatus, jqXHR){ // contextで指定した値がthisとして受け取れる alert( this );// “ホゲホゲ”と表示される });
context
にはオブジェクトや配列を指定することも可能です。複数の値をコールバックに渡したい時はオブジェクトを使います。
$.ajax({ url:'foo.html', type:'GET', dataType:'jsonp', // contextはオブジェクトを渡すことも可能 context:{ type:'テスト', text:'ホゲホゲ' }, }).done(function(data, textStatus, jqXHR){ alert( this.type );// “テスト”と表示される });
$.ajaxを呼び出すきっかけになったエレメントそのものを渡したい場合なら以下のようになります。
<button id='btn'>クリック</button> <script type='text/javascript'> $('#btn').click(function(){ $.ajax({ url:'foo.html', type:'GET', dataType:'jsonp', // contextはオブジェクトを渡すことも可能 context:this, }).done(function(data, textStatus, jqXHR){ alert( $(this).text() );// “クリック”と表示される }); }); </script>
また、グローバル変数を使うことでコールバックに値を渡すことも可能なのですが、それが避けるべきコードであることは言うまでもありません。
スポンサーリンク
jQueryカテゴリーの投稿
- [jQuery] 文字列が含まれているかどうかの判定
- [jQuery] rowspanを持つtableで行の表示・非表示を切り替える
- [jQuery] find()とchildren()の使い分け
- jQueryとPHPでAJAX通信を行う
- [jQuery] $('form').change()でフォーム全体の変更を監視する
- [jQuery] 属性が存在するかどうかチェックするコード
- [JS][jQuery] 要素の存在を確認する6通りのコードと実行速度
- [jQuery] tableの内容を取得する
- [jQuery] clone()で操作対象のエレメントを元の位置に保つ
- [jQuery] index()でクリックされたhtml要素が何番目の要素かを知る