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

时间:2014-05-29 20:54:06

标签: javascript jquery ajax this

我正在进行$ .ajax调用,并且以下代码无法按预期工作。警报会导致未定义'

$(document).ready( function {
  $(".elem").on("click", function(e) {

    e.preventDefault();

    $.ajax( {
      url: 'index.php',
      data: {
        'action': 'something'
      },
      success: function() {
        alert($(this).data("foobar"));
      }
    });
  });
)};

但是,在输入ajax函数之前,我可以通过向$(this)添加别名来实现它。

$(document).ready( function {
  $(".elem").on("click", function(e) {

    var old_this = $(this);

    e.preventDefault();

    $.ajax( {
      url: 'index.php',
      data: {
        'action': 'something'
      },
      success: function() {
        alert(old_this.data("foobar"));
      }
    });
  });
)};

我无法为被点击的元素分配唯一的ID,因此通过$("#id")访问它不是一个选项。

是否有更标准化的方法来访问在进入成功函数之前存在的$(this),或者这种方式是否正常工作?

1 个答案:

答案 0 :(得分:6)

你拥有它的方式就好了。默认情况下,jQuery中的this ajax回调是ajax设置对象(您可以通过$.ajaxSettings设置)。 $.ajax还有一个context属性,您可以设置:

$.ajax({
    url: url,
    data: data,
    context: this,
    success: success
});

然后您可以按预期使用$(this),但我个人认为this的重新分配更容易理解。但是,您可能希望选择一个比old_this更好的变量名称。