Подтвердить что ты не робот

Как получить доступ к функции $(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();
            }
        });
4b9b3361

Ответ 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();

Примечание: Здесь я предполагаю, что вы имеете дело с одним элементом/итерацией.