Проблема
Всередині зворотного дзвінка 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
}
});
Пов'язані