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

Ajax调用Controller后无法更新页面点赞数的问题

问题分析与解决方案

你的问题核心是AJAX回调函数里的this指向发生了变化,导致无法正确定位到要更新的.nbrAdore元素。

在$(".adore2").click()事件里,this确实指向被点击的按钮,但进入$.ajax的success回调后,this的上下文已经变成了AJAX请求的配置对象(不是原来的按钮),所以$(this).parent().parent().siblings().find(".nbrAdore")根本找不到目标元素,自然无法更新数值。

解决方法(三种可选)

方法1:提前保存this的引用(最兼容的方案)

在click事件里先把按钮的引用存到变量里,比如$btn = $(this),然后在success里用这个变量来定位元素:

$(document).ready(function(){ 
  $(".adore2").click(function(){ 
    var $btn = $(this); // 保存按钮的jQuery对象
    var aime = $btn.parent().find(".adore1").val(); 
    var value = $btn.parent().parent().siblings().find(".nbrAdore").text(); 
    alert(value); 
    $.ajax({ 
      type:"POST", 
      data: {aime:aime}, 
      url:"acceuilServlet", 
      success:function(result){ 
        alert(result); 
        // 用提前保存的$btn来定位元素,同时改用closest简化DOM层级查找
        $btn.closest(".aimerSection").find(".nbrAdore").html(result); 
      } 
    }); 
  }); 
});

这里把parent().parent()改成closest(".aimerSection")是为了让代码更健壮——就算后续DOM结构微调,只要.aimerSection这个父容器存在,就能正确找到目标元素。

方法2:使用ES6箭头函数(如果项目支持ES6)

箭头函数不会绑定自己的this,会继承外层作用域的this,所以可以直接在回调里使用原来的this:

$(document).ready(function(){ 
  $(".adore2").click(function(){ 
    var aime = $(this).parent().find(".adore1").val(); 
    var value = $(this).parent().parent().siblings().find(".nbrAdore").text(); 
    alert(value); 
    $.ajax({ 
      type:"POST", 
      data: {aime:aime}, 
      url:"acceuilServlet", 
      success:(result) => { // 使用箭头函数
        alert(result); 
        $(this).closest(".aimerSection").find(".nbrAdore").html(result); 
      } 
    }); 
  }); 
});

方法3:在AJAX配置里指定context

jQuery的$.ajax允许通过context参数,直接指定回调函数里的this指向:

$(document).ready(function(){ 
  $(".adore2").click(function(){ 
    var aime = $(this).parent().find(".adore1").val(); 
    var value = $(this).parent().parent().siblings().find(".nbrAdore").text(); 
    alert(value); 
    $.ajax({ 
      type:"POST", 
      data: {aime:aime}, 
      url:"acceuilServlet", 
      context: this, // 指定回调里的this指向当前点击的按钮
      success:function(result){ 
        alert(result); 
        $(this).closest(".aimerSection").find(".nbrAdore").html(result); 
      } 
    }); 
  }); 
});

额外优化建议

  • 可以给.aimerSection添加数据属性,比如data-post-id="${post.id}",这样后续定位元素或扩展功能时,能减少对DOM层级的依赖,代码更易维护。
  • 请求发起时可以暂时禁用按钮,防止用户重复点击:$btn.prop("disabled", true),在success或complete回调里再恢复:$btn.prop("disabled", false)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:36