問題
コールバック内では、イベントハンドラーがバインドされた要素ではなく、Ajax呼び出しのオブジェクトをthis
参照しjqXHR
ます。JavaScriptでの動作の詳細をご覧くださいthis
。
ソリューション
ES2015 +が利用できる場合は、矢印関数を使用するのがおそらく最も簡単なオプションです。
$.ajax({
//...
success: (json) => {
// `this` refers to whatever `this` refers to outside the function
}
});
次のcontext
オプションを設定できます。
このオブジェクトは、すべてのAjax関連のコールバックのコンテキストになります。デフォルトでは、コンテキストは、呼び出しで使用されるajax設定を表すオブジェクトです(に$.ajaxSettings
渡される設定とマージされます$.ajax
)。(...)
$.ajax({
//...
context: this,
success: function(json) {
// `this` refers to the value of `context`
}
});
または使用$.proxy
:
$.ajax({
//...
success: $.proxy(function(json) {
// `this` refers to the second argument of `$.proxy`
}, this)
});
またはthis
、コールバックの外側の値への参照を保持します。
var element = this;
$.ajax({
//...
success: function(json) {
// `this` refers to the jQXHR object
// use `element` to refer to the DOM element
// or `$(element)` to refer to the jQuery object
}
});
関連した