Problema
Dentro de la devolución de llamada, se thisrefiere al jqXHRobjeto de la llamada Ajax, no al elemento al que estaba vinculado el controlador de eventos. Obtenga más información sobre cómo thisfunciona en JavaScript .
Soluciones
Si ES2015 + está disponible para usted, entonces usar una función de flecha probablemente sería la opción más simple:
$.ajax({
//...
success: (json) => {
// `this` refers to whatever `this` refers to outside the function
}
});
Puede configurar la contextopción :
Este objeto se convertirá en el contexto de todas las devoluciones de llamada relacionadas con Ajax. De forma predeterminada, el contexto es un objeto que representa la configuración de ajax utilizada en la llamada ( $.ajaxSettingscombinada con la configuración pasada $.ajax). (...)
$.ajax({
//...
context: this,
success: function(json) {
// `this` refers to the value of `context`
}
});
o use $.proxy:
$.ajax({
//...
success: $.proxy(function(json) {
// `this` refers to the second argument of `$.proxy`
}, this)
});
o mantener una referencia al valor de thisfuera de la devolución de llamada:
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
}
});
Relacionado