JavaScript暂停脚本更改外观顺序
-
09-12-2019 - |
题
我有以下脚本:
posting();
pause(time);
postSent(postUrl, fields);
function postSent(postUrl, fields)
{
$.ajax( {
url : postUrl,
type : "POST",
data : fields,
cache : false,
error : function(xhr, textStatus, errorThrown) {
var answer = xhr.responseText;
answer = answer.split(":");
answer = answer[0].replace(/}/g,"").replace(/{/g,"").replace(/"/g,"");
if (answer == "id")
{
isPostSent = true;
}
else
{
isPostSent = false;
}
}
});
}
function pause(milliseconds) {
var dt = new Date();
while ((new Date()) - dt <= milliseconds) { /* Do nothing */ }
}
function posting()
{
var table = '';
table += '<table border="0" rules="none" cellpadding="5" style="z-index:+10; position:fixed; top:35%; left:35%; box-shadow: 0px 0px 5px 5px #888888;" rules="none" border="0" bgcolor="#edeff4">';
table += '<td align="center">';
table += '<img src="images/loading.gif" id="post_status_image">';
table += '</td>';
table += '<tr >';
table += '<td align="center">שולח הודעה, אנא המתן...</td>';
table += '</tr>';
table += '<tr>';
table += '<td align="center" id="post_status"></td>';
table += '</tr>';
table += '<tr >';
table += '<td align="center" ><img id="post_close" src="images/close1.png" onclick="closePop()" style="visibility:hidden;"></td>';
table += '</tr>';
table += '</table>';
document.getElementById('post').innerHTML = table;
}
.
时间设置为3000厘米。 我的问题是我想要发布()函数来在屏幕上显示表格(它的类“加载”屏幕),然后暂停脚本。 实际情况下,从脚本的某种原因首次暂停,只有在完成后,它会向我展示加载屏幕......如何?
解决方案
浏览器运行JavaScript并呈现在一个线程上。因此,您的所有三个函数将在页面更新之前完成。这就是为什么 never 在基于循环和检查时间的js中实现暂停函数。相反,您需要使用setTimeout()
并将任何代码放在暂停在转移到setTimeout()
后暂停后的代码。
使用您的示例代码:
.posting();
setTimeout(function() {
postSent(postUrl, fields);
}, 3000);
其他提示
本机JavaScript中没有睡眠或暂停功能。但我们可以这样实现。
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
.
我创建小提琴: http://jsfiddle.net/6dqbp/
脚本来自: http://www.phpied.com/sleep-in-JavaScript /
我在回答后发现这个网址。可能有用。
不隶属于 StackOverflow