2010-04-15 176 views
27

看来我无法访问$(this)里面的jquery ajax成功函数。请参阅下面的代码。

$.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(); 
      } 
     }); 

回答

53

我应该$(this)是什么?如果你在该函数外有一个引用,你可以将它存储到一个变量中。

$('#someLink').click(function() { 
    var $t = $(this); 
    $.ajax(... , function() { 
     $t.parent().remove(); 
    }); 
} 
+0

如果你不能添加var,因为它被封装在一个函数中,例如:'$('。fileupload')。fileupload({dataType:'json',start:{} ... etc' – Alex 2017-02-16 05:39:59

+0

应该是'$('。fileupload')'?如果是,那么:'var $ t = $('。fileupload')。fileupload(...)' – nickf 2017-02-16 12:15:20

+0

我创建了一个问题:http://stackoverflow.com/questions/42285542/access-this-in-event-jquery-file-upload – Alex 2017-02-16 22:03:23

0

我看不到$(this)引用任何东西,但更简单的方法将是给元素类或ID和参考,从jQuery的:

相反的:

$(this).parent().remove(); 

你可以做:

$('#element_id').parent().remove(); 

注:这里我假设你正在处理一个元素/迭代。

+0

我还没有包含代码$(this)正在引用。但它会有点像 $('#element_id')。click(function(){$。ajax({...})}); – Yalamber 2010-04-16 10:04:59

4

尝试调用$.proxy,改变函数内的this范围:

$.ajax({ 
    success: $.proxy(function(response) { $(this).parent().bla(); }, $(this)); 
}); 
50

退房上下文选项 - 完美的作品对我来说:

$.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! 
    } 
}); 
+13

这应该是被接受的答案,目前被接受的答案看起来像一个破解 – 2014-04-23 11:14:17

+0

我同意这是根据文档的正确选择。经验在使用$ .post而不是$ .ajax时,我无法使用上下文解决方案,它会产生一个错误:“Uncaught TypeError:Illegal invocation”。我正在运行jQuery v1.11.3并明白调用错误是与被调用的原型函数有关,但即使找到了正在炸毁的线,也无法修复它这似乎是$ .post和$ .ajax之间的一个区别。 使用一个定义为具有函数范围的变量是该特定情况下的工作解决方案。 – 2016-03-18 04:26:25

+0

Brian Layman - 出于好奇,为什么不使用$ .ajax呢? – 2016-03-21 13:07:01

3

如果你想this在您的ajax调用的情况下为this,您还可以使用.bind(),如下所示:

$.ajax({ 
    url: 'some_url' 
    success: function(data) { 
    // do something 'this' 
    }.bind(this) 
}) 

它结合的this的成功回调里面this之外的价值。

相关问题