Как получить доступ к функции $(this) внутри функции обратного вызова ajax
Кажется, что я не могу получить доступ к $(этой) внутри функции jquery ajax success. см. ниже код.
$.ajax({
type: 'post',
url: '<?php echo site_url('user/accept_deny_friendship_request')?>',
data: 'action='+$action+'&user_id='+$user_id,
success: function(response){
//cannot access $(this) here $(this).parent().remove();
}
});
Ответы
Ответ 1
Что должно быть $(this)
? Если у вас есть ссылка на него вне этой функции, вы можете просто сохранить его в переменной.
$('#someLink').click(function() {
var $t = $(this);
$.ajax( ... , function() {
$t.parent().remove();
});
}
Ответ 2
Проверьте контекстный параметр - отлично работает для меня:
$.ajax({
context: this,
type: 'post',
url: '<?php echo site_url('user/accept_deny_friendship_request')?>',
data: 'action='+$action+'&user_id='+$user_id,
success: function(response){
//can access this now!
}
});
Ответ 3
Попробуйте вызвать $.proxy
, чтобы изменить область this
внутри функции:
$.ajax({
success: $.proxy(function(response) { $(this).parent().bla(); }, $(this));
});
Ответ 4
Если вы хотите, чтобы this
был this
в контексте вашего вызова ajax, вы также можете использовать .bind()
, как показано ниже:
$.ajax({
url: 'some_url'
success: function(data) {
// do something 'this'
}.bind(this)
})
Он связывает значение this
внутри обратного вызова успеха до this
снаружи.
Ответ 5
Я не вижу $(this)
ссылки на что-либо, но проще всего было бы дать элементу класс или id и ссылку, что из jquery:
Вместо:
$(this).parent().remove();
Вы можете сделать:
$('#element_id').parent().remove();
Примечание: Здесь я предполагаю, что вы имеете дело с одним элементом/итерацией.