使用 Ajax 动态更改 Bootstrap 4 弹出窗口的内容

Dynamically change content of a Bootstrap 4 popover using Ajax

我想通过 ajax 调用使用 html 设置 Bootstrap4 弹出窗口的内容。

Bootstrap 3 有很多解决方案,但我找不到 Bootstrap 版本 4 的解决方案。

这是我的 HTML:

                <button type="button"
                        id="AlertsBellButton"
                        class="btn btn-lg btn-danger"
                        data-toggle="popover"
                        data-placement="bottom"
                        data-trigger="focus" 
                        title="Alerts"
                        data-html="true"
                        data-content="Loading...">
                    <i class="fal fa-bell"></i>
                </button>

还有我的 Javascript:

$('#AlertsBellButton').on('show.bs.popover', function () {
    $.ajax({
        url: '/Alert/GetAlertsForBell/',
        type: 'get',
        cache: false,
        success: function (data) {

            $('#AlertsBellButton').attr('data-content', data);
        }
    });
});

设置 data-content 属性显然应该可以解决问题;第一次单击铃铛时,即使在第一个 ajax 调用完成后,内容仍显示 "Loading...",当我第二次单击时,显示正确的数据。

我还尝试在成功处理程序中使用 jQuery 定位 div,但这没有用,因为弹出窗口尚未添加到 DOM Bootstrap4.

对于其他遇到困难的人,我添加了一些自定义 html 作为具有 id 的内容:

                <button type="button"
                        id="AlertsBellButton"
                        class="btn btn-lg btn-danger"
                        data-toggle="popover"
                        data-placement="right"
                        data-trigger="focus"
                        title="Alerts"
                        data-html="true"
                        data-content="<div id='AlertBellContainer'>Loading...</div>">
                    <span class="sr-only">Notifications</span>
                    <i class="fal fa-bell"></i>
                </button>

然后通过定位自定义 html:

在成功处理程序中简单地设置我的 html
$('#AlertsBellButton').on('show.bs.popover', function (e) {
    $.ajax({
        url: '/Alert/GetAlertsForBell/',
        type: 'get',
        cache: false,
        success: function (data) {
            $('#AlertBellContainer').html(data);                            
        }
    });
});

兄弟,我确定我来晚了,但是最新的 jquery 他们可以使用 jquery

的 attr 函数

检查此示例:

<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" data-trigger="hover" onclick='$("#testing").attr("data-content", "test success");' id="testing" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

如您所见,按下按钮时初始内容发生了变化

这是我将动态内容加载到弹出窗口的 'data-content' 部分的解决方案。在 Bootstrap 4 中,您可以随意设置样式。

我们使用的ID名为'anx-content'。它位于弹出窗口的 'data-content' 内。

按钮或link:

<a class="anx_open" data-toggle="popover" title="My Content" data-html="true" data-placement="left" data-content="<div id='anx-content'>Loading...</div>" id="anx">Show dynamic popover</a>

ajax用它 注意 '#anx-content' 作为 div 加载内容。

$(".anx_open").click(function() {

    // YOUR DATA STUFF FIRST
    ....
    $.ajax({ 
        type: "POST",
        url: '/your_file_fetching_your_content.',
        data: dataString, 
        success : function(data) { 
            $('#anx-content').html(data);
        },
        error : function(data) { $(".error").show().html('Oops! Something went wrong! The error has been registered into our system and will be solved as soon as possible.'); } 
    });
});