【发布时间】:2014-12-03 19:46:02
【问题描述】:
我对为什么在 javascript/jquery/ajax 执行期间无法获取文本更新感到困惑。
我有以下代码。
$("#updates").html("Collecting your team names.");
YourTeamFirst(YourTeam, TeamValue);
$("#updates").html("Collecting their team names.");
TheirTeamNext(TheirTeam, TeamValue);
$("#updates").html("Gathering ID's.");
setNames(TeamValue);
$("#updates").html("Setting Details.");
setChampRatios(TeamValue);
$("#updates").html("Setting Ratios.");
setChampKDRS(TeamValue);
$("#updates").html("Finished!");
即
示例函数(唯一出现的ajax在子函数中,实际的函数调用和文本更新在一个普通的JS函数中,没有ajax...)
function TheirTeamNext(TheirTeam, TeamValue) {
$.ajax({
url: "/PlayerLookUp/TheirRankedData",
type: "POST",
data: "IDList=" + T[i],
dataType: "json",
async: false,
success: function (resp) {
//just boring logic
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (XMLHttpRequest.status == 0) {
alert("Issue with reaching Riot API server. Pleast contact an Admin.");
}
}
});
}
而唯一出现的就是“完成”(在脚本完成之后),为什么什么都不会出现呢?执行大约需要 10 秒,因此应在 innerHtml/Html 中弹出其他更新。我也尝试过使用document.getElementById("updates").innerHTML = ...,它也没有显示任何内容,然后当它完成时将显示“完成”文本。
每个函数都是 JQuery、Ajax 或 javascript,在我的 C# 控制器中来回执行一些操作,但我觉得文本更新仍应更新我的 innerHtml 文本,除非有一些我不知道的关于 innerHtml 的脚本内容/HTML...
另外:如果我在某处输入alert(),则会出现最新的文本更新。那么为什么只有警报中断或脚本执行结束才会更新/发布我的文本。我希望我的用户看到脚本的更新消息。
【问题讨论】:
-
请发布一个完整的代码示例,以便我们看到您所做的一切。很可能您的所有 .html() 语句都在执行,但是太快了,除了最后一次更新之外什么都看不到。再说一次,没有代码它是卡片,但既然你说警报有效并且警报被阻止,那是我的猜测。
-
@j08691 如果问题类似于“传播”,那么现在肯定需要大约 10 秒,因为我执行 3rd 方 API 调用,每个调用需要 1-2 秒,而我正在做大约 20到目前为止。
-
您应该在阻止浏览器的 UI 之前强制 UI 重绘,这意味着在
html()方法调用和同步 ajax 之间。就是说,这是一个很不清楚的问题恕我直言 -
那么您可以尝试:
$("#updates").html("Collecting your team names.").prop('offsetHeight'); YourTeamFirst(YourTeam, TeamValue);等等吗?或者更好,为什么不使用异步 ajax 请求来代替??? -
@A.Wolff 我试过了,但似乎没有用。如果你去这里:pastebin.com/GDXaymAb 我发布了它。这是完成的第二个函数,称为 verifyNames(哦,它不在 playerViews 中,仅供参考)
标签: javascript jquery html ajax innerhtml