Приостановка скрипта JavaScript меняет порядок появления - PullRequest
0 голосов
/ 08 марта 2012

У меня есть следующий скрипт:

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 миллисекунд.Моя проблема заключается в том, что я хочу использовать функцию posting (), чтобы показать таблицу на экране (своего рода экран загрузки), а затем приостановить выполнение сценария.на самом деле, по какой-то причине скрипт сначала останавливается, и только после его завершения он показывает мне экран загрузки ... как получилось?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Браузеры запускают JavaScript и отрисовывают все в одном потоке.Таким образом, все три функции JS будут завершены до обновления страницы.Вот почему вы должны никогда реализовать функцию паузы в JS, которая основана на цикле while и проверке времени.Вместо этого вам нужно использовать setTimeout() и поместить любой код, который должен запускаться после паузы в обратном вызове, который вы передаете setTimeout().

Используя ваш пример кода:

posting();
setTimeout(function() {
    postSent(postUrl, fields);
}, 3000);
0 голосов
/ 08 марта 2012

В нативном 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/

Я нашел этот URL после того, как ответил,Может быть полезным.

...