我尝试在jQuery Ajax中使用此

时间:2018-06-19 21:01:53

标签: jquery ajax

我意识到$(this)在AJAX之外运作良好,但在AJAX内却无法运作,有人可以帮忙看看它是什么错误或我可以做什么吗?

$(function() {
    $(".add_friend").each(function () {
       var a=$(this).closest('div').find('#user').html();
       $.post("check_following.php", {username:a}, function(resp) {
        if (resp=='following') {
         $(this).hide();
        }     
      });
    });
});

2 个答案:

答案 0 :(得分:1)

启动新功能时,this的上下文将改变。您必须以某种方式缓存值。这种情况通常是我在相同情况下使用的:

$(function() {
  $(".add_friend").each(function() {
    var $this = $(this); // Cache it here.
    var a = $this.closest('div').find('#user').html();
    $.post("check_following.php", {
      username: a
    }, function(resp) {
      if (resp == 'following') {
        $this.hide();
      }
    });
  });
});

答案 1 :(得分:0)

这是一个范围问题,每当您在jQuery中将一个函数放到另一个函数中时,范围都不同

在第一级选择器$(“。add_friend”)。each(function(){..})中,您引用的是针对选择器找到的每个迭代,在本例中为具有类'.add_friend'的元素。

在第二级上,ajax调用$(this)内部不再包含元素引用。您需要将第一级的引用放在变量内,以便可以在另一级范围内使用。

使用.text()方法代替.html()也是一个好主意 因此,如果在#user元素中仅获得文本,则放置在#user元素中的选择符$ this.closest('div')。find('#user ').html();会返回“文本<i></i>”,但是如果每次只需要文本,则使用.text()更安全,也可以使用.trim()来删除字符串中的所有empy空间

<i></i>