You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax调用后this.id未定义,如何在done回调高效获取.home的ID?

解决AJAX回调中获取原元素ID的问题

这是个很常见的上下文绑定问题~ 在.done()回调函数里,this的指向已经不是原来的.home表单元素了,而是AJAX请求对应的jqXHR对象,所以this.id会返回undefined。下面是几种高效的解决方案,不用重复执行$('.home').attr('id'):

方法1:提前保存元素ID到变量

这是兼容性最好、最常用的方式,在AJAX调用前把需要的ID存到变量里,回调里直接使用:

$(".home").submit(function(e) {
  e.preventDefault();
  e.stopPropagation();
  var sendData = {
        // 你的数据
      };
  // 提前保存当前元素的ID到变量
  const elementId = this.id;
  const url = "/home" + elementId;
  $.ajax({
      url: url,
      type: "POST",
      contentType: "application/json",
      data: JSON.stringify(sendData)
  }).done(function(result){
      // 直接使用提前保存的ID
      console.log(elementId);
  })
});

方法2:使用jQuery AJAX的context选项

jQuery的$.ajax方法支持通过context参数指定回调函数的this指向,直接把它设为当前表单元素即可:

$(".home").submit(function(e) {
  e.preventDefault();
  e.stopPropagation();
  var sendData = {
        // 你的数据
      };
  const url = "/home" + this.id;
  $.ajax({
      url: url,
      type: "POST",
      contentType: "application/json",
      data: JSON.stringify(sendData),
      // 指定回调里的this指向当前表单元素
      context: this
  }).done(function(result){
      // 现在this就是原来的.home元素了
      console.log(this.id);
  })
});

方法3:使用ES6箭头函数

箭头函数不会绑定自己的this,会继承外层作用域的this(也就是submit回调里的表单元素),代码更简洁,但需要环境支持ES6:

$(".home").submit(function(e) {
  e.preventDefault();
  e.stopPropagation();
  var sendData = {
        // 你的数据
      };
  const url = "/home" + this.id;
  $.ajax({
      url: url,
      type: "POST",
      contentType: "application/json",
      data: JSON.stringify(sendData)
  }).done((result) => {
      // 箭头函数继承外层的this,直接访问id
      console.log(this.id);
  })
});

内容的提问来源于stack exchange,提问作者Steven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:28