javascript - 内容总是在第二次点击时更新,而不是第一次?
问题描述
编写一些 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");
}
}
所以重申一下;通话有效。但它只适用于我的元素的第二次点击,而不是第一次。我是否可以在认为文本准备就绪时以某种方式加载文本,而不必再次单击或以其他方式修复此问题?
解决方案
getSessionCookieAsString 函数本身返回一个承诺。你可以试试下面的代码。
getSessionCookieAsString().done(function (value) {
$('#session-cookie-showcase').data('bs.popover').config.content = value;
});
编辑它。
推荐阅读
- esp32 - 无法为 ESP32 构建项目
- flutter - 如何在颤动表中显示用户输入
- javascript - 从控制器传递纬度和经度以使用 Googlemaps Codeigniter 进行查看
- javascript - 我在使用 React 制作的项目中遇到了一个未定义的错误
- coq - Coq 定理证明:peano 算术中的简单分数律
- c# - ASP.NET Core 3.0 配置控制器以返回 pascal case 对象
- vue.js - apollo 客户端,在不破坏使用 jwt 的 http 链接的同时添加订阅
- github - 我可以在私有 git 存储库中授予不同的权限吗?
- if-statement - 否则如果在第一次迭代时停止 [Arduino]
- removing-whitespace - 删除除制表符和换行符以外的所有空格