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