在ajax成功函数中使用$(this)

时间:2014-09-28 12:57:43

标签: jquery ajax

$(".itemInto").click(function(){
var a = $(this).siblings(".itemName").html();
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "process.php",
        data: {a:a},
        success: function(data) {
            alert (data); // 20     
            $(this).siblings(".itemCount").text(data);  // doesn't work. Nothing happens.

        }
    });
});

.itemCount.itemInto的兄弟姐妹。为什么我不能将data置于其中?控制台是免费的。

3 个答案:

答案 0 :(得分:4)

因为上下文已经改变。

尝试将context: this添加到您的AJAX参数中。

答案 1 :(得分:3)

因为回调中的$(this)不是$(" .itemInto"),你可以这样做:

$(".itemInto").click(function(){
var a = $(this).siblings(".itemName").html();
var $_this = $(this);
$.ajax({
    type: "POST",
    dataType: "json",
    url: "process.php",
    data: {a:a},
    success: function(data) {
        alert (data); // 20     
        $_this.siblings(".itemCount").text(data);  // doesn't work. Nothing happens.

    }
    });
});

答案 2 :(得分:1)

您可以按如下方式缓存对this的引用:

$(".itemInto").click(function(){
  var a = $(this).siblings(".itemName").html(),
  $this = $(this);
  $.ajax({
    type: "POST",
    dataType: "json",
    url: "process.php",
    data: {a:a},
    success: function(data) {
        alert (data); // 20     
        $this.siblings(".itemCount").text(data);  // use the cached variable instead.
    }
  });
});

或者如果您必须使用this,您可以使用原生bind()方法,如下所示:

$(".itemInto").click(function () {
var a = $(this).siblings(".itemName").html();
  $.ajax({
    type: "POST",
    dataType: "json",
    url: "process.php",
    data: {
        a: a
    },
    success: function (data) {
        alert(data); // 20     
        $(this).siblings(".itemCount").text(data);

    }.bind(this)
  });
});