代码之家  ›  专栏  ›  技术社区  ›  OmniOwl

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

  •  0
  • OmniOwl  · 技术社区  · 6 年前

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

    Javascript调用用C#编写的本地代理。用于设置popover本身的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");
        }
    }
    

    0 回复  |  直到 6 年前
        1
  •  1
  •   Amit Gupta    6 年前

    getSessionCokieAsstring函数正在返回一个承诺本身。你能试试下面的代码吗。

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

    编辑过。