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

标签 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),或者这种方法是否可以正常工作?

最佳答案

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

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

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

关于javascript - jQuery:在 $.ajax 成功函数中使用 $(this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942834/

相关文章:

javascript - 从 websocket 数据源读取 JSON 数组

javascript - Firebase Web update() 删除所有其他子节点

javascript - 如何通过单击图像隐藏倒三 Angular 形?

jquery - 从 AJAX 页面中已有的内联链接重新加载 AJAX

javascript - 使用for循环将重复的项目插入Javascript中的单独数组?

javascript - AngularJS 路由器和 .NET 后端 - 在 templateUrl 上获取重定向

javascript - 具有窗口高度的 jQuery .scroll() 触发器

javascript - 在允许表单提交之前检查值是否是传递的变量?

javascript - 使用 PHP、jQuery 登录网站

php - ajax 获取 id 未定义