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

Ajax请求响应后then方法未触发,Bootstrap popover无法弹出问题排查

问题排查与修复方案

存在的问题

  • 未定义变量导致Promise被拒绝
    你在$.ajax配置中写了data: data,但代码中没有定义data变量,请求发送前就会抛出ReferenceError,导致返回的Promise进入rejected状态,你没有绑定错误回调,所以then的成功回调不会执行,错误也不会默认在控制台打印。
  • then回调内的this指向错误
    then里的普通函数默认this指向全局对象(浏览器中为window),不是触发mouseover的.my-link-popup元素,就算then执行也找不到对应元素弹出popover。
  • 混用success回调与Promise链式调用(非致命但不规范)
    $.ajax返回的jqXHR对象本身符合Promise A+规范,请求成功后响应数据会直接传给then的第一个回调,不需要额外写success回调return数据,混用两种异步处理方式容易造成逻辑混乱。
  • popover配置中变量没有正确插值
    你写的title: "<span>x.displayName</span>"是普通字符串,不会解析x.displayName的变量值,只会原样输出文本。
  • 重复初始化popover会导致异常
    每次触发mouseover都调用$(this).popover()初始化组件,重复初始化会导致Bootstrap popover出现行为异常。
  • 额外注意:getUserProfile定义时接收的参数是email,但调用时传入的是this.href(触发元素的完整链接地址),请确认接口参数是否匹配,避免传参错误。

修复后完整代码

function getUserProfile(email){
   return $.ajax({
        url: my_url + email,
        method: 'GET',
        async: true
        // 移除了未定义的data参数,如果确实需要传参请先定义data变量
    });
}

// 替换为mouseenter避免子元素冒泡重复触发
$(".my-link-popup").off('mouseenter').on('mouseenter', function (){
    // 提前保存触发元素引用,解决this指向问题
    const $triggerEl = $(this);
    // 已初始化过popover直接弹出,避免重复请求
    if($triggerEl.data('bs.popover')) {
        $triggerEl.popover('show');
        return;
    }

    getUserProfile(this.href)
    .then(function(x){
        console.log(x);
        // 用模板字符串解析变量
        $triggerEl.popover({
            html: true,
            title: `<span>${x.displayName}</span>`,
            content: "Some nice content"
        });
        $triggerEl.popover('show');
    })
    // 新增错误回调方便调试
    .catch(function(err){
        console.error('请求用户信息失败:', err);
    });
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:03