【发布时间】:2016-09-15 22:26:04
【问题描述】:
我正在开发一个需要与 Internet Explorer 8 兼容的网络应用程序(你知道,与 HELL 兼容)。问题是我正在上传一个文件,该文件稍后由 PHP 代码处理并刷新页面。当我有一个处理过的文件时,我使用该文件将数据插入到表中,因此我需要一个进程栏并在插入此数据时阻止 UI(我需要为每一行调用另一个 PHP 进程)
问题是下一个,我想阻止那个 UI,我已经解决了逻辑和所有兼容性问题;但工作 5 天后,我无法阻止 UI。这是一个最小的代码(封装了我们需要的所有东西),以简化想法:
$(document).ready({
(...)
$("#title").html('some text');
$("#bar").html('');
$.blockUI({message: $('#window'),css:{width:'303px'}});
go = true;
while (go){
$.ajax({<ASYNC FALSE AJAX CALL});
if (!file.lines) go = false;
<update progress>
}
$.unblockUI();
(...)
});
显然,$.blockUI 应该阻塞主线程(直到我解除阻塞)并显示一个个性化的窗口,下面的代码是:
<div id="window" style="display: none; cursor: default">
<div id="title_bar">
<div id="titulos">some text</div>
<div id="cerrar"></div>
</div>
<div id="body">
<img src="an icon"
alt="enviando" border="0" width="33" height="33" id="enviar">
<p class="titulo" id='title'></p>
<p class="texto" id='bar'></p>
<br />
</div>
</div>
我认为问题在于我在一个不是主线程的线程上执行该块,并且我不能真正阻塞 UI;但我需要那个块,因为我必须强制用户等到我处理完所有信息。
谢谢大家,希望你们能帮我解决这个问题。
【问题讨论】:
-
尝试删除
async: false。使用它是非常糟糕的做法,这意味着您的 UI 不会更新,这会干扰您正在使用的blockUI插件。 -
您遇到的任何错误。或者你有小提琴吗?
-
我无法删除
async: false,我知道这是一种不好的做法,但我需要在这段代码@RoryMcCrossan 上使用它。我没有任何错误,开发者控制台显示了关于async: false的典型警告。 -
我 99% 确定在没有
async: false的情况下还有另一种方法可以满足您的要求,而且我也很确定这就是您的问题的原因。 -
@RoryMcCrossan 我刚刚尝试使用
async: true删除while条件(如果我在它阻止浏览器时离开了它)但仍然无法正常工作。
标签: javascript php jquery html web