2011-07-24 11 views
3

これをajax関数の内部で使用してイベントターゲットを参照しようとしています。それは私の考え方ではないようです。例えば'this'はajax関数の内部を表しています

$('#test').live('click',function(){ 
    $.ajax({ 
     type:'post', 
     url: 
     data:..., 
     success:function(mes){ 
      $(this).append('mes'); 
     } 
    }); 
}); 

ので、ここでは$(これは)( '#test')セレクタを指すものではありません。それは何を参照していますか?どんな説明にも感謝します。

+1

'はconsole.log($(この));'? – zerkms

+0

@zerkms、ありがとう、これは非常に便利なヒントです。 – bingjie2680

+1

[あなたが「これ」について知りたかったこと以上に」(http://stackoverflow.com/questions/133973/how-does-this-keyword-work-within-a-javascript-object-literal/134149#134149 ) – andyb

答えて

4

成功コールバックthisは、AJAXの再取得に関する情報を含むjQueryによって作成されたグローバルオブジェクトを指します。

$('#test').live('click',function() { 
    var $this = $(this); 
    $.ajax({ 
     type: 'post', 
     url: '/' 
     data: { }, 
     success: function(mes) { 
      $this.append('mes'); 
     } 
    }); 
}); 

をしたり、クロージャを好きではない場合は、要求のキー/値ペアとしてそれを渡すことができます:あなたは、元のDOM要素を取得したい場合は、クロージャでそれをキャプチャすることができ

$('#test').live('click',function() { 
    $.ajax({ 
     type: 'post', 
     url: '/' 
     data: { }, 
     myElement: $(this), 
     success: function(mes) { 
      this.myElement.append('mes'); 
     } 
    }); 
}); 

これは、successコールバックが無名関数ではないシナリオで役に立ちます。

+0

私はこの答えが好きです。おかげで – bingjie2680

1

これはコンテキストです。 JQuery site
すべてのコールバック内のthis参照は、設定で$ .ajaxに渡されたコンテキストオプションのオブジェクトです。コンテキストが指定されていない場合、これはAjax設定自体への参照です。

1

この例では、$(this)$.ajax()オブジェクトを表します。

3

デフォルトでは、thisがAJAX呼び出しで使用される拡張設定オブジェクトになります。 documentationから:デフォルトで

、コンテキストは($.ajaxSettings$.ajaxに渡された設定と合併)の呼び出しで使用されるAJAX設定 を表すオブジェクトです。

あなたはthisは、コールバックに参照するオブジェクトを指定するには、設定contextを使用することができます。

$("#test").live("click", function() { 
    $.ajax({ 
     type: "post", 
     context: this, 
     success: function(mes) { 
      // Here, this will refer to #test. 
      $(this).append('mes'); 
     } 
    }); 
}); 
+0

多くのことを学ぶことができます.. :) – bingjie2680

関連する問題