문제

다음과 같은 스크립트가 있습니다.

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를 실행하고 하나의 스레드에서 모두 렌더링합니다.따라서 페이지가 업데이트되기 전에 모든 세 개의 JS 기능이 완료됩니다.이것이 결코 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;
    }
  }
}
.

FILDLED : http://jsfiddle.net/6dqbp/

에서 찍은 스크립트 : http://www.phpied.com/sleep-in-자바 스크립트 /

나는이 URL이 내가 대답 한 후에 발견했다.유용 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top