Vấn đề
Bên trong lệnh gọi lại, this
đề cập đến jqXHR
đối tượng của lệnh gọi Ajax, không phải phần tử mà trình xử lý sự kiện bị ràng buộc. Tìm hiểu thêm về cách this
hoạt động trong JavaScript .
Các giải pháp
Nếu ES2015 + có sẵn cho bạn, thì sử dụng hàm mũi tên có thể là tùy chọn đơn giản nhất:
$.ajax({
//...
success: (json) => {
// `this` refers to whatever `this` refers to outside the function
}
});
Bạn có thể đặt context
tùy chọn :
Đối tượng này sẽ được làm bối cảnh của tất cả các lệnh gọi lại liên quan đến Ajax. Theo mặc định, ngữ cảnh là một đối tượng đại diện cho cài đặt ajax được sử dụng trong cuộc gọi (được $.ajaxSettings
hợp nhất với cài đặt được chuyển đến $.ajax
). (...)
$.ajax({
//...
context: this,
success: function(json) {
// `this` refers to the value of `context`
}
});
hoặc sử dụng $.proxy
:
$.ajax({
//...
success: $.proxy(function(json) {
// `this` refers to the second argument of `$.proxy`
}, this)
});
hoặc giữ một tham chiếu đến giá trị của this
bên ngoài lệnh gọi lại:
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
}
});
Có liên quan