内容总是在第二次点击时更新,而不是第一次?

时间:2019-10-31 10:36:48

标签: javascript c# ajax promise

编写一些JavaScript来更新Bootstrap 3 Popover中的一些文本。我可能没有正确地使用Promises,但是我希望文本在我第一次单击时显示在弹出窗口中,而不是在我两次单击时显示在弹出窗口中。

Javascript调用用C#编写的本地代理。用于设置弹出框的JavaScript如下所示:

$(function () {
    $('#session-cookie-showcase').popover({
        html: true
    });
    $('#session-cookie-showcase').on('show.bs.popover', function () {
        Promise.resolve(getSessionCookieAsString()).then(function (value) {
            $('#session-cookie-showcase').data('bs.popover').config.content = value;
        })
    })
})

ajax调用看起来像这样:

async function getSessionCookieAsString(callback) {
    return $.ajax({
        type: "GET",
        url: AppName + '/api/omitted/hentSessionCookieSomTekst',
        dataType: "json",
        contentType: "application/json",
        success: ((result) => function (result) { return result }),
        error: ((XMLHttpRequest, textStatus, errorThrown) =>
            handleWebserviceCallError(XMLHttpRequest, textStatus, errorThrown, false))
    });
}

最后,C#代理看起来像这样:

[HttpGet("hentSessionCookieSomTekst")]
public string HentSessionCookieSomTekst()
{
    string userKey = _configuration.GetSection("SessionKeys:User").Value;
    if (!string.IsNullOrEmpty(userKey))
    {
        BrugerObjekt bruger = HttpContext.Session.Get<BrugerObjekt>(userKey);
        return JsonConvert.SerializeObject(bruger.ToString('n'));
    }
    else
    {
        return JsonConvert.SerializeObject("NULL");
    }
}

因此重申;通话正常。但这仅适用于我元素的第二次单击,而不适用于第一次单击。我可以以某种方式使文本在准备就绪时立即加载,而不必再次单击或以其他方式解决此问题吗?

1 个答案:

答案 0 :(得分:1)

getSessionCookieAsString函数本身返回一个Promise。您可以尝试以下代码吗?

getSessionCookieAsString().done(function (value) { $('#session-cookie-showcase').data('bs.popover').config.content = value; });

对其进行了编辑。