Problema
Dentro do retorno de chamada, this
refere-se ao jqXHR
objeto da chamada Ajax, não ao elemento ao qual o manipulador de eventos estava vinculado. Saiba mais sobre como this
funciona em JavaScript .
Soluções
Se ES2015 + estiver disponível para você, usar uma função de seta provavelmente seria a opção mais simples:
$.ajax({
//...
success: (json) => {
// `this` refers to whatever `this` refers to outside the function
}
});
Você pode definir a context
opção :
Este objeto se tornará o contexto de todos os callbacks relacionados ao Ajax. Por padrão, o contexto é um objeto que representa as configurações ajax usadas na chamada ( $.ajaxSettings
mescladas com as configurações passadas para $.ajax
). (...)
$.ajax({
//...
context: this,
success: function(json) {
// `this` refers to the value of `context`
}
});
ou use $.proxy
:
$.ajax({
//...
success: $.proxy(function(json) {
// `this` refers to the second argument of `$.proxy`
}, this)
});
ou mantenha uma referência ao valor de this
fora do retorno de chamada:
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
}
});
Relacionados