Ответ 1
проблема
Внутри обратного вызова this
относится к объекту jqXHR
вызова Ajax, а не к элементу, к jqXHR
привязан обработчик событий. Подробнее о том, как this
работает в JavaScript.
Решения
Если доступно 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
}
});