2010-04-15 74 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之外的價值。