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

OnN*_*NIX 3 javascript ajax jquery this

我正在进行$ .ajax调用,以下代码无法正常工作.警报导致'undefined'

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

    e.preventDefault();

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

但是,$(this)在输入ajax函数之前,我可以通过添加别名来使其正常工作.

$(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"));
      }
    });
  });
)};
Run Code Online (Sandbox Code Playgroud)

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

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

Exp*_*lls 6

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

$.ajax({
    url: url,
    data: data,
    context: this,
    success: success
});
Run Code Online (Sandbox Code Playgroud)

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