2011-12-30 108 views
0

因此,這裏是我的,當用戶點擊一個後續按鈕代碼:

$('.follow_btn').click(function() { 
    $(this).html('<img src = "../assets/style_images/loading.gif">'); 
    var userId = $(this).attr('id'); 
    $.post('../assets/scripts/ajax_follow_parse.php', { 
     userId: userId 
    }, function(data) { 
     $(this).html(data); 
    }); 
}); 

這是很高興的加載GIF來取代它,如上線2.但是,當它返回數據並將其替換爲第4行返回的數據時。

如何解決此問題?

+0

重複[$(this)在函數中不起作用](http://stackoverflow.com/questions/7859558/this-doesnt-work-in-a-function),[$(這個)對象在jquery post()之後變得未定義(許多其他的東西)(http://stackoverflow.com/questions/8422872/this-object-becomes-undefined-after-a-jquery-post)。 – 2011-12-30 22:43:18

回答

7

分配$(this)$.post()外部變量:

var $this = $(this); 

然後,而不是使用$(this)添加數據,使用剛創建的變量:

$this.html(data); 

看着你的代碼再次,你也可以這樣做:

$("#" + userId).html(data); 

既然你已經有了你的元素的id

2

Inside $.postthis不再是你的元素。您需要在$.post之前將其保存到變量中。

$('.follow_btn').click(function() { 
    var $this = $(this); // Save this, so it can be used inside $.post 
    $this.html('<img src = "../assets/style_images/loading.gif">'); 
    var userId = $this.attr('id'); 
    $.post('../assets/scripts/ajax_follow_parse.php', { userId: userId }, function(data) { 
     $this.html(data); 
    }); 
}); 
1

$(this)$.post範圍內不存在上下文。你需要將它緩存到一個變量中並在裏面重用。

$('.follow_btn').click(function() { 
    $this = $(this); 
    $this.html('<img src = "../assets/style_images/loading.gif">'); 
    var userId = $this.attr('id'); 
    $.post('../assets/scripts/ajax_follow_parse.php', { userId: userId }, function(data) { 
     $this.html(data); //$this not $(this) 
    }); 
});