0

我有以下脚本:

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 毫秒。我的问题是我想在屏幕上显示表格(它是一种“加载”屏幕),然后暂停脚本。实际上,由于某种原因,脚本首先暂停,只有在它完成后,它才会向我显示加载屏幕......怎么会?

4

2 回答 2

2

浏览器在一个线程上运行 JavaScript 并渲染所有内容。因此,您的所有三个 JS 函数都将在页面更新之前完成。这就是为什么你永远不应该在 JS 中实现基于 while 循环和检查时间的暂停函数。相反,您需要setTimeout()在传递给的回调中使用并放置任何需要在暂停后运行的代码setTimeout()

使用您的示例代码:

posting();
setTimeout(function() {
    postSent(postUrl, fields);
}, 3000);
于 2012-03-08T09:48:59.877 回答
-1

本机 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/

我回答后找到了这个网址。可能有用。

于 2012-03-08T09:47:51.857 回答